)]}'
{"openstackclient/api/versions.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"549d41d08db547f19713dea153f5bdb0d97da165","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class APIVersion(object):"},{"line_number":32,"context_line":"    \"\"\"This class represents an API Version Request."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This class provides convenience methods for manipulation"},{"line_number":35,"context_line":"    and comparison of version numbers that we need to do to"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_38ce9683","line":32,"updated":"2017-03-30 13:37:29.000000000","message":"s/Request/Object/ ?\n\nOr do you see value in keeping this as close to the novaclient code as possible?","commit_id":"30142537d47c65b3526f97c9e074b9b29aa46802"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2e74b970b0f3e3a6f276771417320261f8b8d5a6","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class APIVersion(object):"},{"line_number":32,"context_line":"    \"\"\"This class represents an API Version Request."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    This class provides convenience methods for manipulation"},{"line_number":35,"context_line":"    and comparison of version numbers that we need to do to"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_67880671","line":32,"in_reply_to":"ffe62b97_38ce9683","updated":"2017-03-30 17:58:47.000000000","message":"I started keeping it close but have made some functional changes in the current version.","commit_id":"30142537d47c65b3526f97c9e074b9b29aa46802"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"549d41d08db547f19713dea153f5bdb0d97da165","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    def __init__(self, version_str\u003dNone):"},{"line_number":40,"context_line":"        \"\"\"Create an API version object."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        :param version_str: String representation of APIVersionRequest."},{"line_number":43,"context_line":"                            Correct format is \u0027X.Y\u0027, where \u0027X\u0027 and \u0027Y\u0027"},{"line_number":44,"context_line":"                            are int values. None value should be used"},{"line_number":45,"context_line":"                            to create Null APIVersionRequest, which is"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_b88d062c","line":42,"updated":"2017-03-30 13:37:29.000000000","message":"s/Request// accordingly","commit_id":"30142537d47c65b3526f97c9e074b9b29aa46802"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"549d41d08db547f19713dea153f5bdb0d97da165","unresolved":false,"context_lines":[{"line_number":43,"context_line":"                            Correct format is \u0027X.Y\u0027, where \u0027X\u0027 and \u0027Y\u0027"},{"line_number":44,"context_line":"                            are int values. None value should be used"},{"line_number":45,"context_line":"                            to create Null APIVersionRequest, which is"},{"line_number":46,"context_line":"                            equal to 0.0"},{"line_number":47,"context_line":"        \"\"\""},{"line_number":48,"context_line":"        self.ver_major \u003d 0"},{"line_number":49,"context_line":"        self.ver_minor \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_38ca164f","line":46,"updated":"2017-03-30 13:37:29.000000000","message":"Adding a comment about X.latest would also be nice.","commit_id":"30142537d47c65b3526f97c9e074b9b29aa46802"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"f60ec90a4d100db83afb5d717ac8623588708799","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    if (not api_version.is_null() and"},{"line_number":206,"context_line":"            str(api_version.ver_major) not in supported_versions):"},{"line_number":207,"context_line":"        if len(supported_versions) \u003d\u003d 1:"},{"line_number":208,"context_line":"            msg \u003d _("},{"line_number":209,"context_line":"                \"Invalid client version \u0027%(version)s\u0027. Major part \""},{"line_number":210,"context_line":"                \"should be \u0027%(major)s\u0027\""},{"line_number":211,"context_line":"            ) % {"},{"line_number":212,"context_line":"                \"version\": api_version.get_string(),"},{"line_number":213,"context_line":"                \"major\": supported_versions[0],"},{"line_number":214,"context_line":"            }"},{"line_number":215,"context_line":"        else:"},{"line_number":216,"context_line":"            msg \u003d _(\"Invalid client version \u0027%(version)s\u0027. \""},{"line_number":217,"context_line":"                    \"Major part must be one of: \u0027%(major)s\u0027\") % {"},{"line_number":218,"context_line":"                \"version\": api_version.get_string(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_82a9887c","line":215,"range":{"start_line":207,"start_character":0,"end_line":215,"end_character":13},"updated":"2017-04-07 09:47:18.000000000","message":"The function check the api major version, it\u0027s a regular case if the server only support one major version API, like: nova. supported_version \u003d\u003d [\u00272\u0027]","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fb99837ae2afe678da4fd8fe4cda445d7c861ca4","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                \"version\": api_version.get_string(),"},{"line_number":213,"context_line":"                \"major\": supported_versions[0],"},{"line_number":214,"context_line":"            }"},{"line_number":215,"context_line":"        else:"},{"line_number":216,"context_line":"            msg \u003d _(\"Invalid client version \u0027%(version)s\u0027. \""},{"line_number":217,"context_line":"                    \"Major part must be one of: \u0027%(major)s\u0027\") % {"},{"line_number":218,"context_line":"                \"version\": api_version.get_string(),"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_fb70cca7","line":215,"in_reply_to":"bff0334d_82a9887c","updated":"2017-04-07 14:45:59.000000000","message":"Yes, that case is handled, as this was taken from novaclient.  In fact, the only reason this is here is because novaclient and cinderclient both use it, I don\u0027t think it is very useful otherwise.","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"f60ec90a4d100db83afb5d717ac8623588708799","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        # Assume that the value of get_endpoint() is something"},{"line_number":255,"context_line":"        # we can get the version of. This is a 404 for Nova \u003c"},{"line_number":256,"context_line":"        # Mitaka if the service catalog contains project_id."},{"line_number":257,"context_line":"        ver \u003d ksa_discover.get_version_data(session, url)"},{"line_number":258,"context_line":"    except ksa_exceptions.NotFound:"},{"line_number":259,"context_line":"        # If that\u0027s a 404, we can instead try hacking together"},{"line_number":260,"context_line":"        # an endpoint root url by chopping off the last 2 /s."}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_3dc1bd55","line":257,"range":{"start_line":257,"start_character":8,"end_line":257,"end_character":11},"updated":"2017-04-07 09:47:18.000000000","message":"If we can add the response object json structure in annotations, that help others to understand the code.","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fb99837ae2afe678da4fd8fe4cda445d7c861ca4","unresolved":false,"context_lines":[{"line_number":254,"context_line":"        # Assume that the value of get_endpoint() is something"},{"line_number":255,"context_line":"        # we can get the version of. This is a 404 for Nova \u003c"},{"line_number":256,"context_line":"        # Mitaka if the service catalog contains project_id."},{"line_number":257,"context_line":"        ver \u003d ksa_discover.get_version_data(session, url)"},{"line_number":258,"context_line":"    except ksa_exceptions.NotFound:"},{"line_number":259,"context_line":"        # If that\u0027s a 404, we can instead try hacking together"},{"line_number":260,"context_line":"        # an endpoint root url by chopping off the last 2 /s."}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_dbe068fd","line":257,"in_reply_to":"bff0334d_3dc1bd55","updated":"2017-04-07 14:45:59.000000000","message":"The response objects will vary somewhat by project, get_version_data() strips off the common wrappers, but the details beyond that are server-specific.","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"f60ec90a4d100db83afb5d717ac8623588708799","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        return APIVersion(), APIVersion()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    return ("},{"line_number":276,"context_line":"        APIVersion(ver[0].get(\u0027min_version\u0027, None)),"},{"line_number":277,"context_line":"        APIVersion(ver[0].get(\u0027version\u0027, None)),"},{"line_number":278,"context_line":"    )"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_5d8fe122","line":276,"range":{"start_line":276,"start_character":19,"end_line":276,"end_character":25},"updated":"2017-04-07 09:47:18.000000000","message":"I\u0027m not familiar ksa_discover, the ver[0] is the \"CURRENT\" API?","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fb99837ae2afe678da4fd8fe4cda445d7c861ca4","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        return APIVersion(), APIVersion()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"    return ("},{"line_number":276,"context_line":"        APIVersion(ver[0].get(\u0027min_version\u0027, None)),"},{"line_number":277,"context_line":"        APIVersion(ver[0].get(\u0027version\u0027, None)),"},{"line_number":278,"context_line":"    )"},{"line_number":279,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_9b1d4011","line":276,"in_reply_to":"bff0334d_5d8fe122","updated":"2017-04-07 14:45:59.000000000","message":"keystoneauth.discover.get_version_data() returns the list of versions supported by a server.  Good catch, this was the assumption made in novaclient, it needs to be more general here.","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"f60ec90a4d100db83afb5d717ac8623588708799","unresolved":false,"context_lines":[{"line_number":294,"context_line":"    return True"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"def discover_version("},{"line_number":298,"context_line":"        session\u003dNone,"},{"line_number":299,"context_line":"        url\u003dNone,"},{"line_number":300,"context_line":"        client_ver\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_05ff9b34","line":297,"range":{"start_line":297,"start_character":4,"end_line":297,"end_character":20},"updated":"2017-04-07 09:47:18.000000000","message":"The discover_version() only do negotiation between user specified version and server version, return an available version, then check the client.min and client.max in make_client(), right?","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fb99837ae2afe678da4fd8fe4cda445d7c861ca4","unresolved":false,"context_lines":[{"line_number":294,"context_line":"    return True"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"def discover_version("},{"line_number":298,"context_line":"        session\u003dNone,"},{"line_number":299,"context_line":"        url\u003dNone,"},{"line_number":300,"context_line":"        client_ver\u003dNone,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_7bca7c6d","line":297,"in_reply_to":"bff0334d_05ff9b34","updated":"2017-04-07 14:45:59.000000000","message":"the client min/max checks are not done here like they are in the clients.  The clients have that information available via globals, we do not and I didn\u0027t want to add it, it seemed a better solution to put the client checks into get_range_overlap() and let the calling code detemine how/when to do that check.","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"f60ec90a4d100db83afb5d717ac8623588708799","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    if (server_min.is_null() and server_max.is_null()):"},{"line_number":365,"context_line":"        # We have no server version information so we can do nothing"},{"line_number":366,"context_line":"        # So return a null version to signal this (or raise something?)"},{"line_number":367,"context_line":"        return APIVersion()"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    # TODO(dtroyer): this is a change, do we want it?"},{"line_number":370,"context_line":"    if not isinstance(client_ver, APIVersion):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_a81c6d6a","line":367,"updated":"2017-04-07 09:47:18.000000000","message":"If can\u0027t discover server version(might not support yet in server side), I think we should set the client version as DEFAULT_API_VERSION, it should work, like the current make_client()","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fb99837ae2afe678da4fd8fe4cda445d7c861ca4","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    if (server_min.is_null() and server_max.is_null()):"},{"line_number":365,"context_line":"        # We have no server version information so we can do nothing"},{"line_number":366,"context_line":"        # So return a null version to signal this (or raise something?)"},{"line_number":367,"context_line":"        return APIVersion()"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"    # TODO(dtroyer): this is a change, do we want it?"},{"line_number":370,"context_line":"    if not isinstance(client_ver, APIVersion):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_5b721813","line":367,"in_reply_to":"bff0334d_a81c6d6a","updated":"2017-04-07 14:45:59.000000000","message":"In the existing client flow, step C assumes no min/max version \u003d\u003d no microversion support and exits null; step G is only reached if \u0027latest\u0027 is requested and returns the no-microversion specific to novaclient (2.0), so we can\u0027t do that here.\n\nIMO, setting the default is up to the caller because different callers will have different responses to \u0027no microversion support\u0027.","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"}],"openstackclient/compute/client.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"549d41d08db547f19713dea153f5bdb0d97da165","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                    \"min\": novaclient.API_MIN_VERSION.get_string(),"},{"line_number":145,"context_line":"                    \"max\": novaclient.API_MAX_VERSION.get_string(),"},{"line_number":146,"context_line":"                }"},{"line_number":147,"context_line":"                raise ksa_exceptions.VersionNotAvailable(msg)"},{"line_number":148,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"ffe62b97_53125b0b","line":147,"updated":"2017-03-30 13:37:29.000000000","message":"Using ksa_exceptions seems a bit artificial at this place to me, is there a reason not to stick to osc-lib\u0027s UnsupportedVersion?","commit_id":"30142537d47c65b3526f97c9e074b9b29aa46802"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2e74b970b0f3e3a6f276771417320261f8b8d5a6","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                    \"min\": novaclient.API_MIN_VERSION.get_string(),"},{"line_number":145,"context_line":"                    \"max\": novaclient.API_MAX_VERSION.get_string(),"},{"line_number":146,"context_line":"                }"},{"line_number":147,"context_line":"                raise ksa_exceptions.VersionNotAvailable(msg)"},{"line_number":148,"context_line":"    return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfeb2761_a7e28e2e","line":147,"in_reply_to":"ffe62b97_53125b0b","updated":"2017-03-30 17:58:47.000000000","message":"The versions.py file is intended to be moved to KSA.  So I\u0027m writing it with that in mind, but doing it in OSC directly for ease of iteration.  If it doesn\u0027t go to KSA it\u0027ll go to osc-lib.","commit_id":"30142537d47c65b3526f97c9e074b9b29aa46802"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"f60ec90a4d100db83afb5d717ac8623588708799","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    if _compute_api_version is not None:"},{"line_number":56,"context_line":"        # Grab the saved client version object if available"},{"line_number":57,"context_line":"        version \u003d _compute_api_version"},{"line_number":58,"context_line":"    else:"},{"line_number":59,"context_line":"        # Use our default as the ultimate fallback"},{"line_number":60,"context_line":"        version \u003d osc_versions.get_api_version(DEFAULT_API_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_4236e005","line":57,"range":{"start_line":57,"start_character":7,"end_line":57,"end_character":15},"updated":"2017-04-07 09:47:18.000000000","message":"and here","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":8276,"name":"kiwik","email":"chenrui.momo@gmail.com","username":"kiwik"},"change_message_id":"f60ec90a4d100db83afb5d717ac8623588708799","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        version \u003d _compute_api_version"},{"line_number":58,"context_line":"    else:"},{"line_number":59,"context_line":"        # Use our default as the ultimate fallback"},{"line_number":60,"context_line":"        version \u003d osc_versions.get_api_version(DEFAULT_API_VERSION)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    version \u003d osc_versions.discover_version("},{"line_number":63,"context_line":"        session\u003dinstance.session,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_a2592c5b","line":60,"range":{"start_line":60,"start_character":8,"end_line":60,"end_character":15},"updated":"2017-04-07 09:47:18.000000000","message":"I prefer to rename \"version\" to \"client_version\" at here, \"version\" is same with the following discovered version variable, same variable name make me confused when read code, so many \"version\" in the file :-)","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"fb99837ae2afe678da4fd8fe4cda445d7c861ca4","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        version \u003d _compute_api_version"},{"line_number":58,"context_line":"    else:"},{"line_number":59,"context_line":"        # Use our default as the ultimate fallback"},{"line_number":60,"context_line":"        version \u003d osc_versions.get_api_version(DEFAULT_API_VERSION)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    version \u003d osc_versions.discover_version("},{"line_number":63,"context_line":"        session\u003dinstance.session,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bff0334d_9bff8033","line":60,"in_reply_to":"bff0334d_a2592c5b","updated":"2017-04-07 14:45:59.000000000","message":"There are many!\n\nThe idea in leaving it the same is that they represent the same thing, but after line 62 it has been negotiated.  I see where making that clear is better...","commit_id":"b58d0ec27dc53fcf6840bdbe3292d0d6772439df"}]}
