)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"454cadb71a1f0246092e11b3422de1a2030bd212","unresolved":false,"context_lines":[{"line_number":13,"context_line":"above with the command:"},{"line_number":14,"context_line":"cinder api-version"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Implements: https://blueprints.launchpad.net/python-cinderclient/"},{"line_number":17,"context_line":"+spec/add-get-server-versions"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Change-Id: Ieb1a56b28188ec17946fe5564b28c165833ffc24"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"dab17558_91958a88","line":16,"updated":"2016-05-10 19:37:22.000000000","message":"nit: should be\nImplements: blueprint add-get-server-versions","commit_id":"44c01c0b4bc377fcab9984995eebbb87c0ae0570"}],"cinderclient/client.py":[{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"97edc6af7b4ac0b53528c1dbdac16f5723688413","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def delete(self, url, **kwargs):"},{"line_number":134,"context_line":"        return self._cs_request(url, \u0027DELETE\u0027, **kwargs)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _get_base_url(self, **kwargs):"},{"line_number":137,"context_line":"        endpoint \u003d self.get_endpoint()"},{"line_number":138,"context_line":"        base_url \u003d \u0027/\u0027.join(endpoint.split(\u0027/\u0027)[:3]) + \u0027/\u0027"},{"line_number":139,"context_line":"        return base_url"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_24496560","line":136,"range":{"start_line":136,"start_character":28,"end_line":136,"end_character":36},"updated":"2016-04-13 21:00:33.000000000","message":"Any reason to pass that, when you don\u0027t use it?","commit_id":"4a3b501355370ea4b4da2b21763673341f606222"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"b8fe1b4502c5188c8d2a4020bd6dad3144b9f745","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def delete(self, url, **kwargs):"},{"line_number":134,"context_line":"        return self._cs_request(url, \u0027DELETE\u0027, **kwargs)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _get_base_url(self, **kwargs):"},{"line_number":137,"context_line":"        endpoint \u003d self.get_endpoint()"},{"line_number":138,"context_line":"        base_url \u003d \u0027/\u0027.join(endpoint.split(\u0027/\u0027)[:3]) + \u0027/\u0027"},{"line_number":139,"context_line":"        return base_url"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_37976749","line":136,"range":{"start_line":136,"start_character":28,"end_line":136,"end_character":36},"in_reply_to":"5a18252c_24496560","updated":"2016-04-14 16:49:57.000000000","message":"Nope, no reason. I\u0027ll remove.","commit_id":"4a3b501355370ea4b4da2b21763673341f606222"},{"author":{"_account_id":12825,"name":"Szymon Wróblewski","email":"szymon.wroblewski@ovhcloud.com","username":"bluex"},"change_message_id":"97edc6af7b4ac0b53528c1dbdac16f5723688413","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                             \u0027auth plugin.\u0027)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _cs_request_base_url(self, url, method, **kwargs):"},{"line_number":167,"context_line":"        base_url \u003d self._get_base_url(**kwargs)"},{"line_number":168,"context_line":"        return self._cs_request("},{"line_number":169,"context_line":"            base_url + url,"},{"line_number":170,"context_line":"            method,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_4463c1dc","line":167,"range":{"start_line":167,"start_character":19,"end_line":167,"end_character":47},"updated":"2016-04-13 21:00:33.000000000","message":"You could probably use urlparse library to do that.","commit_id":"4a3b501355370ea4b4da2b21763673341f606222"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"b8fe1b4502c5188c8d2a4020bd6dad3144b9f745","unresolved":false,"context_lines":[{"line_number":164,"context_line":"                             \u0027auth plugin.\u0027)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _cs_request_base_url(self, url, method, **kwargs):"},{"line_number":167,"context_line":"        base_url \u003d self._get_base_url(**kwargs)"},{"line_number":168,"context_line":"        return self._cs_request("},{"line_number":169,"context_line":"            base_url + url,"},{"line_number":170,"context_line":"            method,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a18252c_b7a89678","line":167,"range":{"start_line":167,"start_character":19,"end_line":167,"end_character":47},"in_reply_to":"5a18252c_4463c1dc","updated":"2016-04-14 16:49:57.000000000","message":"Yeah, but it\u0027s actually more lines of code, I think. You\u0027d still need to strip off the port from the netloc part after parsing.","commit_id":"4a3b501355370ea4b4da2b21763673341f606222"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ca9fe2a0776488c029e155b25938501af65690ac","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def delete(self, url, **kwargs):"},{"line_number":134,"context_line":"        return self._cs_request(url, \u0027DELETE\u0027, **kwargs)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _get_base_url(self):"},{"line_number":137,"context_line":"        endpoint \u003d self.get_endpoint()"},{"line_number":138,"context_line":"        base_url \u003d \u0027/\u0027.join(endpoint.split(\u0027/\u0027)[:3]) + \u0027/\u0027"},{"line_number":139,"context_line":"        return base_url"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_590b2c2a","line":136,"updated":"2016-04-14 20:36:14.000000000","message":"We need some kind of unit test for this method, just due to the complexity.","commit_id":"abc50708ee8f088c7ad4cb2993fadfafc0b56eaa"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"948605233d7ad21f6bf1c9eb2152a71bf78bad81","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def delete(self, url, **kwargs):"},{"line_number":134,"context_line":"        return self._cs_request(url, \u0027DELETE\u0027, **kwargs)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _get_base_url(self):"},{"line_number":137,"context_line":"        endpoint \u003d self.get_endpoint()"},{"line_number":138,"context_line":"        base_url \u003d \u0027/\u0027.join(endpoint.split(\u0027/\u0027)[:3]) + \u0027/\u0027"},{"line_number":139,"context_line":"        return base_url"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_54c93358","line":136,"in_reply_to":"5a18252c_590b2c2a","updated":"2016-04-14 22:16:46.000000000","message":"will do.","commit_id":"abc50708ee8f088c7ad4cb2993fadfafc0b56eaa"}],"cinderclient/tests/unit/v2/fakes.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ca9fe2a0776488c029e155b25938501af65690ac","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"                        \u0027type\u0027: \u0027boolean\u0027},"},{"line_number":1200,"context_line":"                }"},{"line_number":1201,"context_line":"                }"},{"line_number":1202,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_19153448","line":1202,"updated":"2016-04-14 20:36:14.000000000","message":"?\n\nThis looked right before.","commit_id":"abc50708ee8f088c7ad4cb2993fadfafc0b56eaa"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"948605233d7ad21f6bf1c9eb2152a71bf78bad81","unresolved":false,"context_lines":[{"line_number":1199,"context_line":"                        \u0027type\u0027: \u0027boolean\u0027},"},{"line_number":1200,"context_line":"                }"},{"line_number":1201,"context_line":"                }"},{"line_number":1202,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_54d013f6","line":1202,"in_reply_to":"5a18252c_19153448","updated":"2016-04-14 22:16:46.000000000","message":"Yup. I\u0027ll set back to where it was.","commit_id":"abc50708ee8f088c7ad4cb2993fadfafc0b56eaa"}],"cinderclient/v2/services.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"e1b1ab185b81a22c0b903cfbb71f514b6e690922","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def server_api_version(self, **kwargs):"},{"line_number":28,"context_line":"        \"\"\"Get api version.\"\"\""},{"line_number":29,"context_line":"        return self.manager.api_version(self, kwargs)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ServiceManager(base.ManagerWithFind):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a1b2928_f0ce40b3","line":29,"range":{"start_line":29,"start_character":28,"end_line":29,"end_character":39},"updated":"2016-04-11 02:57:03.000000000","message":"Where is this function defined？\nShould it be \"server_api_version\" according to line 85?","commit_id":"1ff1b89d2696322251645b16e62f06e4777a57bd"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"2aa86db0a9db5d0c2440d527b418f814e37a5708","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def server_api_version(self, **kwargs):"},{"line_number":28,"context_line":"        \"\"\"Get api version.\"\"\""},{"line_number":29,"context_line":"        return self.manager.api_version(self, kwargs)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class ServiceManager(base.ManagerWithFind):"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a1b2928_849fab02","line":29,"range":{"start_line":29,"start_character":28,"end_line":29,"end_character":39},"in_reply_to":"7a1b2928_f0ce40b3","updated":"2016-04-11 15:59:02.000000000","message":"Good catch. This is dead code.","commit_id":"1ff1b89d2696322251645b16e62f06e4777a57bd"},{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"e1b1ab185b81a22c0b903cfbb71f514b6e690922","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        body \u003d {\"host\": host, \"backend_id\": backend_id}"},{"line_number":83,"context_line":"        return self._update(\"/os-services/failover_host\", body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def server_api_version(self, url_append\u003d\"\"):"},{"line_number":86,"context_line":"        \"\"\"Returns the API Version supported by the server."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        :param url_append: String to append to url to obtain specific version"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a1b2928_d05d04ee","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":26},"updated":"2016-04-11 02:57:03.000000000","message":"This is exposed to lib users.\nSo I think it should be wrapped by api_version.","commit_id":"1ff1b89d2696322251645b16e62f06e4777a57bd"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"2aa86db0a9db5d0c2440d527b418f814e37a5708","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        body \u003d {\"host\": host, \"backend_id\": backend_id}"},{"line_number":83,"context_line":"        return self._update(\"/os-services/failover_host\", body)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def server_api_version(self, url_append\u003d\"\"):"},{"line_number":86,"context_line":"        \"\"\"Returns the API Version supported by the server."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        :param url_append: String to append to url to obtain specific version"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a1b2928_d7b6773c","line":85,"range":{"start_line":85,"start_character":8,"end_line":85,"end_character":26},"in_reply_to":"7a1b2928_d05d04ee","updated":"2016-04-11 15:59:02.000000000","message":"yes, you are right.","commit_id":"1ff1b89d2696322251645b16e62f06e4777a57bd"}],"cinderclient/v2/shell.py":[{"author":{"_account_id":20105,"name":"Cao ShuFeng","email":"caosf.fnst@cn.fujitsu.com","username":"caosf.fnst"},"change_message_id":"e1b1ab185b81a22c0b903cfbb71f514b6e690922","unresolved":false,"context_lines":[{"line_number":2656,"context_line":""},{"line_number":2657,"context_line":""},{"line_number":2658,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":2659,"context_line":"@api_versions.wraps(\"3.0\")"},{"line_number":2660,"context_line":"def do_api_version(cs, args):"},{"line_number":2661,"context_line":"    \"\"\"Display the API version information.\"\"\""},{"line_number":2662,"context_line":"    columns \u003d [\u0027ID\u0027, \u0027Status\u0027, \u0027Version\u0027, \u0027Min_version\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a1b2928_7048705c","line":2659,"range":{"start_line":2659,"start_character":21,"end_line":2659,"end_character":24},"updated":"2016-04-11 02:57:03.000000000","message":"I can\u0027t understand why this is placed in directory \"v2\".\nShould it be placed in \"cinderclient/v3\"?\n(no -1 vote for this, I just don\u0027t understand.)","commit_id":"1ff1b89d2696322251645b16e62f06e4777a57bd"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"2aa86db0a9db5d0c2440d527b418f814e37a5708","unresolved":false,"context_lines":[{"line_number":2656,"context_line":""},{"line_number":2657,"context_line":""},{"line_number":2658,"context_line":"@utils.service_type(\u0027volumev2\u0027)"},{"line_number":2659,"context_line":"@api_versions.wraps(\"3.0\")"},{"line_number":2660,"context_line":"def do_api_version(cs, args):"},{"line_number":2661,"context_line":"    \"\"\"Display the API version information.\"\"\""},{"line_number":2662,"context_line":"    columns \u003d [\u0027ID\u0027, \u0027Status\u0027, \u0027Version\u0027, \u0027Min_version\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a1b2928_f75573c6","line":2659,"range":{"start_line":2659,"start_character":21,"end_line":2659,"end_character":24},"in_reply_to":"7a1b2928_7048705c","updated":"2016-04-11 15:59:02.000000000","message":"That is a good question. I had originally written v3 enpdoint support to put all code in v3, and just have v2 import it. It was pointed out during review that we should put all code in v2, and add new stuff to v3. But that will ultimately mean that we have a lot of duplicated code in v3 and v2. We don\u0027t need to do that.\nSo, we can either use api_versions.wraps() here, in v2, or move all code to v3 and do it there.\nI will start this discussion with the community to figure out which is best.\nThanks Cao.","commit_id":"1ff1b89d2696322251645b16e62f06e4777a57bd"}]}
