)]}'
{"openstack/_meta/connection.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0d4f3af311e13110308a03ec9271ebf6284aa5a0","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                    class_name\u003d\"{service_type} Proxy\".format("},{"line_number":51,"context_line":"                        service_type\u003dservice_type),"},{"line_number":52,"context_line":"                    **service)"},{"line_number":53,"context_line":"            elif len(desc_class.supported_versions.keys()) \u003d\u003d 1:"},{"line_number":54,"context_line":"                supported_version \u003d list("},{"line_number":55,"context_line":"                    desc_class.supported_versions.keys())[0]"},{"line_number":56,"context_line":"                doc \u003d _DOC_TEMPLATE.format("}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_4c1ea7bb","line":53,"range":{"start_line":53,"start_character":50,"end_line":53,"end_character":57},"updated":"2018-09-06 08:39:08.000000000","message":"I\u0027m not sure if len(x.keys()) is python 3 friendly, keys() return a generator in python 3. On the other hand, you can just use len(x) for dicts.","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"928cb1bd19a115f70f23b3b12f6437c6b8965c1a","unresolved":false,"context_lines":[{"line_number":50,"context_line":"                    class_name\u003d\"{service_type} Proxy\".format("},{"line_number":51,"context_line":"                        service_type\u003dservice_type),"},{"line_number":52,"context_line":"                    **service)"},{"line_number":53,"context_line":"            elif len(desc_class.supported_versions.keys()) \u003d\u003d 1:"},{"line_number":54,"context_line":"                supported_version \u003d list("},{"line_number":55,"context_line":"                    desc_class.supported_versions.keys())[0]"},{"line_number":56,"context_line":"                doc \u003d _DOC_TEMPLATE.format("}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_b780854b","line":53,"range":{"start_line":53,"start_character":50,"end_line":53,"end_character":57},"in_reply_to":"3f79a3b5_4c1ea7bb","updated":"2018-09-11 13:31:50.000000000","message":"Good point- let\u0027s do len(x)","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"}],"openstack/compute/v2/server.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def get_password(self, session):"},{"line_number":188,"context_line":"        \"\"\"Get the encrypted administrator password.\"\"\""},{"line_number":189,"context_line":"        url \u003d utils.urljoin(Server.base_path, self.id, \u0027os-server-password\u0027)"},{"line_number":190,"context_line":"        return session.get(url)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def reboot(self, session, reboot_type):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_64717ade","line":189,"updated":"2018-09-28 12:29:27.000000000","message":"I wonder if we need to use self._get_session here..","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    def get_password(self, session):"},{"line_number":188,"context_line":"        \"\"\"Get the encrypted administrator password.\"\"\""},{"line_number":189,"context_line":"        url \u003d utils.urljoin(Server.base_path, self.id, \u0027os-server-password\u0027)"},{"line_number":190,"context_line":"        return session.get(url)"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    def reboot(self, session, reboot_type):"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_7808392c","line":189,"in_reply_to":"3f79a3b5_64717ade","updated":"2018-09-28 15:17:50.000000000","message":"I think this should be fine for this - the proxy will be passing it in.\n\nHowever, we should really consider the design of this session passing before we cut a 1.0 -- and honestly should at least change the name of the parameter to proxy or something - even though that\u0027ll be PAINFUL.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"}],"openstack/config/cloud_region.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0d4f3af311e13110308a03ec9271ebf6284aa5a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3f79a3b5_ec5bf382","updated":"2018-09-06 08:39:08.000000000","message":"I wonder if changes in this file can be separated to their own patch. This one is big enough.","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"928cb1bd19a115f70f23b3b12f6437c6b8965c1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3f79a3b5_5791f199","in_reply_to":"3f79a3b5_ec5bf382","updated":"2018-09-11 13:31:50.000000000","message":"I think they might? If we get this bad-boy green, maybe we can go back and see about splitting it up a little.","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0d4f3af311e13110308a03ec9271ebf6284aa5a0","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def get_all_version_data(self, service_type):"},{"line_number":417,"context_line":"        # Seriously. Don\u0027t think about the existential crisis"},{"line_number":418,"context_line":"        # that is the next line. You\u0027ll wind up in cthulu\u0027s lair."},{"line_number":419,"context_line":"        service_type \u003d self.get_service_type(service_type)"},{"line_number":420,"context_line":"        versions \u003d self.get_session().get_all_version_data("},{"line_number":421,"context_line":"            service_type\u003dservice_type,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ac689b20","line":418,"range":{"start_line":418,"start_character":51,"end_line":418,"end_character":57},"updated":"2018-09-06 08:39:08.000000000","message":"typo: cthulhu :)","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"928cb1bd19a115f70f23b3b12f6437c6b8965c1a","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def get_all_version_data(self, service_type):"},{"line_number":417,"context_line":"        # Seriously. Don\u0027t think about the existential crisis"},{"line_number":418,"context_line":"        # that is the next line. You\u0027ll wind up in cthulu\u0027s lair."},{"line_number":419,"context_line":"        service_type \u003d self.get_service_type(service_type)"},{"line_number":420,"context_line":"        versions \u003d self.get_session().get_all_version_data("},{"line_number":421,"context_line":"            service_type\u003dservice_type,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_d785015b","line":418,"range":{"start_line":418,"start_character":51,"end_line":418,"end_character":57},"in_reply_to":"3f79a3b5_ac689b20","updated":"2018-09-11 13:31:50.000000000","message":"We do NOT want to anger cthulhu!","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        version \u003d self._get_config(\u0027api_version\u0027, service_type)"},{"line_number":256,"context_line":"        if version:"},{"line_number":257,"context_line":"            try:"},{"line_number":258,"context_line":"                float(version)"},{"line_number":259,"context_line":"            except ValueError:"},{"line_number":260,"context_line":"                return None"},{"line_number":261,"context_line":"        return version"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_a4b6b288","line":258,"updated":"2018-09-28 12:29:27.000000000","message":"we don\u0027t expect stuff like \"latest\" or \"2.latest\" here, do we?","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":255,"context_line":"        version \u003d self._get_config(\u0027api_version\u0027, service_type)"},{"line_number":256,"context_line":"        if version:"},{"line_number":257,"context_line":"            try:"},{"line_number":258,"context_line":"                float(version)"},{"line_number":259,"context_line":"            except ValueError:"},{"line_number":260,"context_line":"                return None"},{"line_number":261,"context_line":"        return version"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_336e6264","line":258,"in_reply_to":"3f79a3b5_a4b6b288","updated":"2018-09-28 15:17:50.000000000","message":"That is an excellent question. My initial reaction is \u0027no\u0027 because this is about picking a major api version - and largely about configuring a specific override vs. what the sdk can find.\n\nOne can use this just to get a properly configured adapter, but in that case just not using a version will get you latest.\n\nThe third use-case is people using OS_*_API_VERSION as shorthand to request a specific microversion (again only useful for people using direct adapters and not for people using the actual SDK) In that case I\u0027m not sure what the behavior would be - but I don\u0027t think it\u0027s likely for 2.latest to go into _config_.\n\nI think I\u0027m still on \u0027no\u0027 - but we should consider what we want the error response to be if the user does that.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    def get_all_version_data(self, service_type):"},{"line_number":422,"context_line":"        # Seriously. Don\u0027t think about the existential crisis"},{"line_number":423,"context_line":"        # that is the next line. You\u0027ll wind up in cthulhu\u0027s lair."},{"line_number":424,"context_line":"        service_type \u003d self.get_service_type(service_type)"},{"line_number":425,"context_line":"        versions \u003d self.get_session().get_all_version_data("},{"line_number":426,"context_line":"            service_type\u003dservice_type,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_44af9e2a","line":423,"updated":"2018-09-28 12:29:27.000000000","message":"This is cool text, but I\u0027d not mind a more formal docstring to precede it ;)\n\nalso: warning ignored!","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"}],"openstack/profile.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0d4f3af311e13110308a03ec9271ebf6284aa5a0","unresolved":false,"context_lines":[{"line_number":22,"context_line":"_logger \u003d _log.setup_logging(\u0027openstack\u0027)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def _get_config_from_profile(profile, authenticator, **kwargs):"},{"line_number":26,"context_line":"    # TODO(shade) Remove this once we\u0027ve shifted python-openstackclient"},{"line_number":27,"context_line":"    # to not use the profile interface."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_acd65bc2","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":28},"updated":"2018-09-06 08:39:08.000000000","message":"can we remove this? it seems to be a private function, at least judging by its name","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"928cb1bd19a115f70f23b3b12f6437c6b8965c1a","unresolved":false,"context_lines":[{"line_number":22,"context_line":"_logger \u003d _log.setup_logging(\u0027openstack\u0027)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def _get_config_from_profile(profile, authenticator, **kwargs):"},{"line_number":26,"context_line":"    # TODO(shade) Remove this once we\u0027ve shifted python-openstackclient"},{"line_number":27,"context_line":"    # to not use the profile interface."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_57d6d155","line":25,"range":{"start_line":25,"start_character":4,"end_line":25,"end_character":28},"in_reply_to":"3f79a3b5_acd65bc2","updated":"2018-09-11 13:31:50.000000000","message":"We should really just go ahead and drop profile suppot completely. senlinclient has merged the patch to get rid of its use of profile.\n\nWhen we split the other stuff into its own change, let\u0027s do the same to this file.","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"}],"openstack/service_description.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0d4f3af311e13110308a03ec9271ebf6284aa5a0","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                version_kwargs[\u0027version\u0027] \u003d version_string"},{"line_number":83,"context_line":"            elif self.supported_versions:"},{"line_number":84,"context_line":"                supported_versions \u003d sorted(["},{"line_number":85,"context_line":"                    int(f) for f in self.supported_versions.keys()])"},{"line_number":86,"context_line":"                version_kwargs[\u0027min_version\u0027] \u003d str(supported_versions[0])"},{"line_number":87,"context_line":"                version_kwargs[\u0027max_version\u0027] \u003d \u0027{version}.latest\u0027.format("},{"line_number":88,"context_line":"                    version\u003dstr(supported_versions[-1]))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_4cfa2743","line":85,"range":{"start_line":85,"start_character":59,"end_line":85,"end_character":66},"updated":"2018-09-06 08:39:08.000000000","message":"nit: .keys() is redundant","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"928cb1bd19a115f70f23b3b12f6437c6b8965c1a","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                version_kwargs[\u0027version\u0027] \u003d version_string"},{"line_number":83,"context_line":"            elif self.supported_versions:"},{"line_number":84,"context_line":"                supported_versions \u003d sorted(["},{"line_number":85,"context_line":"                    int(f) for f in self.supported_versions.keys()])"},{"line_number":86,"context_line":"                version_kwargs[\u0027min_version\u0027] \u003d str(supported_versions[0])"},{"line_number":87,"context_line":"                version_kwargs[\u0027max_version\u0027] \u003d \u0027{version}.latest\u0027.format("},{"line_number":88,"context_line":"                    version\u003dstr(supported_versions[-1]))"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_17e05926","line":85,"range":{"start_line":85,"start_character":59,"end_line":85,"end_character":66},"in_reply_to":"3f79a3b5_4cfa2743","updated":"2018-09-11 13:31:50.000000000","message":"Done","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0d4f3af311e13110308a03ec9271ebf6284aa5a0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            elif self.supported_versions:"},{"line_number":84,"context_line":"                supported_versions \u003d sorted(["},{"line_number":85,"context_line":"                    int(f) for f in self.supported_versions.keys()])"},{"line_number":86,"context_line":"                version_kwargs[\u0027min_version\u0027] \u003d str(supported_versions[0])"},{"line_number":87,"context_line":"                version_kwargs[\u0027max_version\u0027] \u003d \u0027{version}.latest\u0027.format("},{"line_number":88,"context_line":"                    version\u003dstr(supported_versions[-1]))"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ac841bb2","line":86,"range":{"start_line":86,"start_character":48,"end_line":86,"end_character":51},"updated":"2018-09-06 08:39:08.000000000","message":"you just converted the versions to int, and here you\u0027re converting both back to strings. maybe remove int() conversion?","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"928cb1bd19a115f70f23b3b12f6437c6b8965c1a","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            elif self.supported_versions:"},{"line_number":84,"context_line":"                supported_versions \u003d sorted(["},{"line_number":85,"context_line":"                    int(f) for f in self.supported_versions.keys()])"},{"line_number":86,"context_line":"                version_kwargs[\u0027min_version\u0027] \u003d str(supported_versions[0])"},{"line_number":87,"context_line":"                version_kwargs[\u0027max_version\u0027] \u003d \u0027{version}.latest\u0027.format("},{"line_number":88,"context_line":"                    version\u003dstr(supported_versions[-1]))"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_f7bb5d0c","line":86,"range":{"start_line":86,"start_character":48,"end_line":86,"end_character":51},"in_reply_to":"3f79a3b5_ac841bb2","updated":"2018-09-11 13:31:50.000000000","message":"The int converstion is to sort numerically- just in case we wind up with something that\u0027s got a v1 AND a v10 :)","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"0d4f3af311e13110308a03ec9271ebf6284aa5a0","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            temp_adapter \u003d config.get_session_client("},{"line_number":91,"context_line":"                self.service_type,"},{"line_number":92,"context_line":"                constructor\u003dproxy.Proxy,"},{"line_number":93,"context_line":"                allow_version_hack\u003dTrue,"},{"line_number":94,"context_line":"                **version_kwargs"},{"line_number":95,"context_line":"            )"},{"line_number":96,"context_line":"            found_version \u003d temp_adapter.get_api_major_version()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_ccb4f784","line":93,"updated":"2018-09-06 08:39:08.000000000","message":"nit: task_manager not needed here?","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"928cb1bd19a115f70f23b3b12f6437c6b8965c1a","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            temp_adapter \u003d config.get_session_client("},{"line_number":91,"context_line":"                self.service_type,"},{"line_number":92,"context_line":"                constructor\u003dproxy.Proxy,"},{"line_number":93,"context_line":"                allow_version_hack\u003dTrue,"},{"line_number":94,"context_line":"                **version_kwargs"},{"line_number":95,"context_line":"            )"},{"line_number":96,"context_line":"            found_version \u003d temp_adapter.get_api_major_version()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3f79a3b5_97cd49b9","line":93,"in_reply_to":"3f79a3b5_ccb4f784","updated":"2018-09-11 13:31:50.000000000","message":"It\u0027s actually not supported at this layer. We should probably fix that ...","commit_id":"51cd60a8f2e29f1ebcb5c2401c98ae8b27b63ec5"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            instance._proxies[self.service_type]._connection \u003d instance"},{"line_number":80,"context_line":"        return instance._proxies[self.service_type]"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _make_proxy(self, instance, owner):"},{"line_number":83,"context_line":"        config \u003d instance.config"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # First, check to see if we\u0027ve got config that matches what we"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_64ac1a35","line":82,"updated":"2018-09-28 12:29:27.000000000","message":"nit: this method makes an adapter, not a proxy :) a short docstring would not hurt as well.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            instance._proxies[self.service_type]._connection \u003d instance"},{"line_number":80,"context_line":"        return instance._proxies[self.service_type]"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _make_proxy(self, instance, owner):"},{"line_number":83,"context_line":"        config \u003d instance.config"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        # First, check to see if we\u0027ve got config that matches what we"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_73cb7a49","line":82,"in_reply_to":"3f79a3b5_64ac1a35","updated":"2018-09-28 15:17:50.000000000","message":"It _totally_ makes a Proxy, I promise.\n\nBut we totally don\u0027t use that owner param.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        # If the user doesn\u0027t give a version in config, but we only support"},{"line_number":91,"context_line":"        # one version, then just use that version."},{"line_number":92,"context_line":"        if not version_string and len(self.supported_versions) \u003d\u003d 1:"},{"line_number":93,"context_line":"            version_string \u003d list(self.supported_versions.keys())[0]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        proxy_obj \u003d None"},{"line_number":96,"context_line":"        if endpoint_override and version_string and self.supported_versions:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_04a52648","line":93,"updated":"2018-09-28 12:29:27.000000000","message":"nit: .keys() is redundant","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        # If the user doesn\u0027t give a version in config, but we only support"},{"line_number":91,"context_line":"        # one version, then just use that version."},{"line_number":92,"context_line":"        if not version_string and len(self.supported_versions) \u003d\u003d 1:"},{"line_number":93,"context_line":"            version_string \u003d list(self.supported_versions.keys())[0]"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        proxy_obj \u003d None"},{"line_number":96,"context_line":"        if endpoint_override and version_string and self.supported_versions:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_932e56f7","line":93,"in_reply_to":"3f79a3b5_04a52648","updated":"2018-09-28 15:17:50.000000000","message":"Done","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                    self.service_type,"},{"line_number":103,"context_line":"                    constructor\u003dproxy_class,"},{"line_number":104,"context_line":"                    task_manager\u003dinstance.task_manager,"},{"line_number":105,"context_line":"                )"},{"line_number":106,"context_line":"        elif endpoint_override and self.supported_versions:"},{"line_number":107,"context_line":"            temp_adapter \u003d config.get_session_client("},{"line_number":108,"context_line":"                self.service_type"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_24a2a240","line":105,"updated":"2018-09-28 12:29:27.000000000","message":"nit: else warning?","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                    self.service_type,"},{"line_number":103,"context_line":"                    constructor\u003dproxy_class,"},{"line_number":104,"context_line":"                    task_manager\u003dinstance.task_manager,"},{"line_number":105,"context_line":"                )"},{"line_number":106,"context_line":"        elif endpoint_override and self.supported_versions:"},{"line_number":107,"context_line":"            temp_adapter \u003d config.get_session_client("},{"line_number":108,"context_line":"                self.service_type"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_53867ebc","line":105,"in_reply_to":"3f79a3b5_24a2a240","updated":"2018-09-28 15:17:50.000000000","message":"WELL - it\u0027s a great question. The result of a user configuring an unsupported version for a service will be a raw proxy set up for that service. It might totally be a thing someone wants to do in order to use the raw Proxy for REST interactions with services or service versions we don\u0027t support yet.\n\nHaving said all that, you\u0027re right- we should throw a warning - we just need to make a Warning class so that the user can filter the warning if they actually do know what they\u0027re doing.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                    self.service_type,"},{"line_number":115,"context_line":"                    constructor\u003dproxy_class,"},{"line_number":116,"context_line":"                    task_manager\u003dinstance.task_manager,"},{"line_number":117,"context_line":"                )"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        if proxy_obj:"},{"line_number":120,"context_line":"            data \u003d proxy_obj.get_endpoint_data()"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_c4608e10","line":117,"updated":"2018-09-28 12:29:27.000000000","message":"ditto?","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            if data.catalog_url !\u003d data.service_url:"},{"line_number":122,"context_line":"                ep_key \u003d \u0027{service_type}_endpoint_override\u0027.format("},{"line_number":123,"context_line":"                    service_type\u003dself.service_type)"},{"line_number":124,"context_line":"                config.config[ep_key] \u003d data.service_url"},{"line_number":125,"context_line":"                proxy_obj \u003d config.get_session_client("},{"line_number":126,"context_line":"                    self.service_type,"},{"line_number":127,"context_line":"                    constructor\u003dproxy_class,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_e4658a1e","line":124,"updated":"2018-09-28 12:29:27.000000000","message":"This bit could use a comment explaining why it is needed. It\u0027s not entirely obvious to me.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            if data.catalog_url !\u003d data.service_url:"},{"line_number":122,"context_line":"                ep_key \u003d \u0027{service_type}_endpoint_override\u0027.format("},{"line_number":123,"context_line":"                    service_type\u003dself.service_type)"},{"line_number":124,"context_line":"                config.config[ep_key] \u003d data.service_url"},{"line_number":125,"context_line":"                proxy_obj \u003d config.get_session_client("},{"line_number":126,"context_line":"                    self.service_type,"},{"line_number":127,"context_line":"                    constructor\u003dproxy_class,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_3e886969","line":124,"in_reply_to":"3f79a3b5_e4658a1e","updated":"2018-09-28 15:17:50.000000000","message":"It\u0027s actually here for bifrost / stanalone noauth mode. Adding!","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            # Maybe openstacksdk is being used for the passthrough"},{"line_number":152,"context_line":"            # REST API proxy layer for an unknown service in the"},{"line_number":153,"context_line":"            # service catalog that also doesn\u0027t have any useful"},{"line_number":154,"context_line":"            # version discovery?"},{"line_number":155,"context_line":"            instance._proxies[self.service_type] \u003d temp_adapter"},{"line_number":156,"context_line":"            instance._proxies[self.service_type]._connection \u003d instance"},{"line_number":157,"context_line":"            return instance._proxies[self.service_type]"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_84661628","line":154,"updated":"2018-09-28 12:29:27.000000000","message":"LOG.warning?","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            # Maybe openstacksdk is being used for the passthrough"},{"line_number":152,"context_line":"            # REST API proxy layer for an unknown service in the"},{"line_number":153,"context_line":"            # service catalog that also doesn\u0027t have any useful"},{"line_number":154,"context_line":"            # version discovery?"},{"line_number":155,"context_line":"            instance._proxies[self.service_type] \u003d temp_adapter"},{"line_number":156,"context_line":"            instance._proxies[self.service_type]._connection \u003d instance"},{"line_number":157,"context_line":"            return instance._proxies[self.service_type]"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_3e4b8928","line":154,"in_reply_to":"3f79a3b5_84661628","updated":"2018-09-28 15:17:50.000000000","message":"Done","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            # service catalog that also doesn\u0027t have any useful"},{"line_number":154,"context_line":"            # version discovery?"},{"line_number":155,"context_line":"            instance._proxies[self.service_type] \u003d temp_adapter"},{"line_number":156,"context_line":"            instance._proxies[self.service_type]._connection \u003d instance"},{"line_number":157,"context_line":"            return instance._proxies[self.service_type]"},{"line_number":158,"context_line":"        proxy_class \u003d self.supported_versions.get(str(found_version[0]))"},{"line_number":159,"context_line":"        if not proxy_class:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_a46b12ee","line":156,"updated":"2018-09-28 12:29:27.000000000","message":"these two operations are done by the caller (lines 77-79), why do you need them here? I think just returning temp_adapter is enough.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":153,"context_line":"            # service catalog that also doesn\u0027t have any useful"},{"line_number":154,"context_line":"            # version discovery?"},{"line_number":155,"context_line":"            instance._proxies[self.service_type] \u003d temp_adapter"},{"line_number":156,"context_line":"            instance._proxies[self.service_type]._connection \u003d instance"},{"line_number":157,"context_line":"            return instance._proxies[self.service_type]"},{"line_number":158,"context_line":"        proxy_class \u003d self.supported_versions.get(str(found_version[0]))"},{"line_number":159,"context_line":"        if not proxy_class:"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_3e64e9b2","line":156,"in_reply_to":"3f79a3b5_a46b12ee","updated":"2018-09-28 15:17:50.000000000","message":"Good catch - that\u0027s leftover from before a refactor to put this into its own method.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"be02f3492e4e05b348110424dcb8427de79be24e","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            return instance._proxies[self.service_type]"},{"line_number":158,"context_line":"        proxy_class \u003d self.supported_versions.get(str(found_version[0]))"},{"line_number":159,"context_line":"        if not proxy_class:"},{"line_number":160,"context_line":"            proxy_class \u003d proxy.Proxy"},{"line_number":161,"context_line":"        return config.get_session_client("},{"line_number":162,"context_line":"            self.service_type,"},{"line_number":163,"context_line":"            constructor\u003dproxy_class,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_44747ed0","line":160,"updated":"2018-09-28 12:29:27.000000000","message":"Okay, so a user is doing connection.baremetal, we support baremetal v1, the server provides the (non-existing now) baremetal v2. We happily return the user a proxy that does not have any baremetal methods, right? There is a case for it, but I\u0027m not convinced we should support it. Because then\n\n connection.baremetal.nodes()\n\nwill return AttributeError that will confuse the hell out of the user.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"94bfcc7d623b7eb37eefe3de1ba91362f0161278","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            return instance._proxies[self.service_type]"},{"line_number":158,"context_line":"        proxy_class \u003d self.supported_versions.get(str(found_version[0]))"},{"line_number":159,"context_line":"        if not proxy_class:"},{"line_number":160,"context_line":"            proxy_class \u003d proxy.Proxy"},{"line_number":161,"context_line":"        return config.get_session_client("},{"line_number":162,"context_line":"            self.service_type,"},{"line_number":163,"context_line":"            constructor\u003dproxy_class,"}],"source_content_type":"text/x-python","patch_set":16,"id":"3f79a3b5_fed5111c","line":160,"in_reply_to":"3f79a3b5_44747ed0","updated":"2018-09-28 15:17:50.000000000","message":"It\u0027ll only ever return that if the user explicitly sets OS_BAREMETAL_API_VERSION\u003d2 as well. Otherwise we\u0027ll only ever return versions of services we support, even if newer ones exist.\n\nNow - in general the overall design conceit of having connection.baremetal behave differently based on what was found is ... not my favorite. But that\u0027s why we have the shade layer I suppose.","commit_id":"d79e72b545f6a530311424ee75520c1efc77c60e"}]}
