)]}'
{"heat/engine/clients/os/nova.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"bbc8c9eb3d3c2353d03fae437b8ef281398de97f","unresolved":false,"context_lines":[{"line_number":88,"context_line":"            \u0027insecure\u0027: self._get_client_option(\u0027nova\u0027, \u0027insecure\u0027)"},{"line_number":89,"context_line":"        }"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        client \u003d nc.Client(api_version, **args)"},{"line_number":92,"context_line":"        client.client.auth_token \u003d self.auth_token"},{"line_number":93,"context_line":"        client.client.management_url \u003d management_url"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da9b358b_9013c25c","line":91,"updated":"2015-03-28 03:04:21.000000000","message":"How about api_version\u003dNone, may be give a log and raise a exception as cinder.py does?","commit_id":"79f219a7f845310e408aeb147b39643acbb51474"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"e27208dc78db8fada9c49482db7c3ed35beccb12","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        api_version \u003d self.get_compute_api_version(management_url)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        computeshell \u003d novashell.OpenStackComputeShell()"},{"line_number":80,"context_line":"        extensions \u003d computeshell._discover_extensions(str(api_version))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        args \u003d {"},{"line_number":83,"context_line":"            \u0027project_id\u0027: self.context.tenant,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da9b358b_e9232404","line":80,"updated":"2015-03-30 14:58:50.000000000","message":"the better to use six.text_type.\nhowever I wonder why do you can not return \u00271.1\u0027 and \u00272\u0027 versions ? (as strings)\nit allows to remove this str() function.","commit_id":"082281544e964a0c5ba3df89b67c3d4cf71cbfca"},{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"b8eda54b580f27a41205dc35cf888ae767154dab","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        \"\"\"Return the most recent API version.\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        if re.search(r\u0027v2\u0027, url):"},{"line_number":63,"context_line":"            return \u00272\u0027"},{"line_number":64,"context_line":"        elif re.search(r\u0027v1.1\u0027, url):"},{"line_number":65,"context_line":"            return \u00271.1\u0027"},{"line_number":66,"context_line":"        raise exception.Error(_(\u0027No compatible version of compute service \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_db0da63f","line":63,"updated":"2015-03-31 08:48:29.000000000","message":"we can\u0027t add the new string below (in the exception), how about:\n\n if re.search(r\u0027v2\u0027, url):\n?       return \u00272\u0027\n return \u00271.1\u0027","commit_id":"ab49efbd3c3f07185aa823300d6063de5cbb3a13"},{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"b8eda54b580f27a41205dc35cf888ae767154dab","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            management_url \u003d self.url_for(service_type\u003d\u0027compute\u0027,"},{"line_number":73,"context_line":"                                          endpoint_type\u003dendpoint_type)"},{"line_number":74,"context_line":"        except ks_exceptions.EndpointNotFound:"},{"line_number":75,"context_line":"            raise exception.Error(_(\u0027No compute service available.\u0027))"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        api_version \u003d self.get_compute_api_version(management_url)"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da9b358b_362149a0","line":75,"updated":"2015-03-31 08:48:29.000000000","message":"can we do this in the same way as currently (just to avoid the string change). i.e. don\u0027t wrap in a exception.","commit_id":"ab49efbd3c3f07185aa823300d6063de5cbb3a13"},{"author":{"_account_id":6899,"name":"Sirushti Murugesan","email":"sirushtim@gmail.com","username":"sirushtim"},"change_message_id":"de28a15f0c5f34e3a9412094e47c1b3dc7e3a33a","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def get_compute_api_version(self, url):"},{"line_number":59,"context_line":"        \"\"\"Return the most recent API version.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if re.search(r\u0027v2\u0027, url):"},{"line_number":62,"context_line":"            return \u00272\u0027"},{"line_number":63,"context_line":"        return \u00271.1\u0027"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da9b358b_67839957","line":61,"updated":"2015-03-31 10:07:28.000000000","message":"Is there a possibility vendors could use a different endpoint without versions in them?","commit_id":"0d53ee460dc0921b58726148e20a3b7f9f753051"},{"author":{"_account_id":14027,"name":"Michal Rostecki","email":"mrostecki@suse.de","username":"mrostecki"},"change_message_id":"ee9b490b82a5a089e48702b5b7c7c802105057b6","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def get_compute_api_version(self, url):"},{"line_number":59,"context_line":"        \"\"\"Return the most recent API version.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if re.search(r\u0027v2\u0027, url):"},{"line_number":62,"context_line":"            return \u00272\u0027"},{"line_number":63,"context_line":"        return \u00271.1\u0027"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"da9b358b_2a9b1574","line":61,"in_reply_to":"da9b358b_67839957","updated":"2015-03-31 11:23:15.000000000","message":"As far as I know, vendors can\u0027t change versions in API URL-s.","commit_id":"0d53ee460dc0921b58726148e20a3b7f9f753051"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"e411d8958793284629c1b95d2ceab3319df6ea6d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def get_compute_api_version(self, url):"},{"line_number":59,"context_line":"        \"\"\"Return the most recent API version.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if re.search(r\u0027v2\u0027, url):"},{"line_number":62,"context_line":"            return \u00272\u0027"},{"line_number":63,"context_line":"        return \u00271.1\u0027"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da9b358b_746e8d02","line":61,"updated":"2015-03-31 20:49:42.000000000","message":"Running a regular expression across the entire URL for v2 would run the risk of false positives. I would prefer a matching method which breaks the URL into path components, and ideally doesn\u0027t use re at all.\n\nAlternatively, does novaclient provide a way of discovering the api version from the endpoint URL?","commit_id":"83637e75df8a54f712dbb691ebe14150801d3faf"},{"author":{"_account_id":14027,"name":"Michal Rostecki","email":"mrostecki@suse.de","username":"mrostecki"},"change_message_id":"6d13b887d19f808ae46dd7dd8d599974b0d943ae","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def get_compute_api_version(self, url):"},{"line_number":59,"context_line":"        \"\"\"Return the most recent API version.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if re.search(r\u0027v2\u0027, url):"},{"line_number":62,"context_line":"            return \u00272\u0027"},{"line_number":63,"context_line":"        return \u00271.1\u0027"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da9b358b_423cd9e1","line":61,"in_reply_to":"da9b358b_0895dedc","updated":"2015-04-01 08:15:35.000000000","message":"Or maybe I can use some regular expression which will check if the version number is on the beginning of path in URL..\n\nLet me know whether any of my replies make sense for you.","commit_id":"83637e75df8a54f712dbb691ebe14150801d3faf"},{"author":{"_account_id":14027,"name":"Michal Rostecki","email":"mrostecki@suse.de","username":"mrostecki"},"change_message_id":"8409d4858f2b050383fa6482e6f86211280ac4a4","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def get_compute_api_version(self, url):"},{"line_number":59,"context_line":"        \"\"\"Return the most recent API version.\"\"\""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if re.search(r\u0027v2\u0027, url):"},{"line_number":62,"context_line":"            return \u00272\u0027"},{"line_number":63,"context_line":"        return \u00271.1\u0027"},{"line_number":64,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"da9b358b_0895dedc","line":61,"in_reply_to":"da9b358b_746e8d02","updated":"2015-03-31 22:32:05.000000000","message":"I don\u0027t know and don\u0027t see any way of api version discovering by endpoint URL in novaclient.\n\nWhat risk of false positives you mean? Do you see any chance of \"v2\" occurence in URL without v2 version in real endpoint of nova API? The idea of breaking URL into path components seems to be overcomplicated for me.","commit_id":"83637e75df8a54f712dbb691ebe14150801d3faf"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"6063c83a7439f601bf846fe0c91468b38519d9a0","unresolved":false,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        if re.search(r\u0027v2\u0027, url):"},{"line_number":62,"context_line":"            return \u00272\u0027"},{"line_number":63,"context_line":"        return \u00271.1\u0027"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def _create(self):"},{"line_number":66,"context_line":"        endpoint_type \u003d self._get_client_option(\u0027nova\u0027, \u0027endpoint_type\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"baa041b7_415e7eea","line":63,"updated":"2015-04-01 22:22:04.000000000","message":"This would fail for \u0027v3\u0027, which my Juno has.","commit_id":"f3e05f5fa6629006948d76d45ff1bd33f608c91a"}]}
