)]}'
{"doc/source/using-sessions.rst":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"54c6958de66d3ff23c1255683d44ac3fdc06aa22","unresolved":false,"context_lines":[{"line_number":339,"context_line":"It can also be used to determine the `min_microversion` and `max_microversion`"},{"line_number":340,"context_line":"supported by the API. If an API does not support microversions, the values for"},{"line_number":341,"context_line":"both will be ``None``. It will also contain values for `next_min_version` and"},{"line_number":342,"context_line":"`not_before` if they exist for the endpoint, or ``None`` if they do not."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"Note that endpoint filter-related arguments can be omitted from calls to"},{"line_number":345,"context_line":"``Adapter.get_endpoint_data``, in which case they are gleaned from those set"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1f1a1f67_b59ab36b","line":342,"updated":"2017-07-12 13:00:37.000000000","message":"If a service does not have a plan for raising the minimum microversion, neither of these keys should be present in the response.","commit_id":"8f4126a1da43edd8a531d89a2ad81c2b7ea02673"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"447946955a1ae15a0ec1700422522fd78786af8a","unresolved":false,"context_lines":[{"line_number":339,"context_line":"It can also be used to determine the `min_microversion` and `max_microversion`"},{"line_number":340,"context_line":"supported by the API. If an API does not support microversions, the values for"},{"line_number":341,"context_line":"both will be ``None``. It will also contain values for `next_min_version` and"},{"line_number":342,"context_line":"`not_before` if they exist for the endpoint, or ``None`` if they do not."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"Note that endpoint filter-related arguments can be omitted from calls to"},{"line_number":345,"context_line":"``Adapter.get_endpoint_data``, in which case they are gleaned from those set"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1f1a1f67_9eff7833","line":342,"in_reply_to":"1f1a1f67_ab61343c","updated":"2017-07-14 17:59:06.000000000","message":"This appears to have been Done in PS6","commit_id":"8f4126a1da43edd8a531d89a2ad81c2b7ea02673"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0ba1ea0e901235d342978ad194ba1a404c66ca9","unresolved":false,"context_lines":[{"line_number":339,"context_line":"It can also be used to determine the `min_microversion` and `max_microversion`"},{"line_number":340,"context_line":"supported by the API. If an API does not support microversions, the values for"},{"line_number":341,"context_line":"both will be ``None``. It will also contain values for `next_min_version` and"},{"line_number":342,"context_line":"`not_before` if they exist for the endpoint, or ``None`` if they do not."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"Note that endpoint filter-related arguments can be omitted from calls to"},{"line_number":345,"context_line":"``Adapter.get_endpoint_data``, in which case they are gleaned from those set"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1f1a1f67_ab61343c","line":342,"in_reply_to":"1f1a1f67_b59ab36b","updated":"2017-07-12 14:09:05.000000000","message":"Also, this should provide a link to the doc noted in the commit message.\n\nOr better yet, this whole document should provide a link to that whole document at the top/bottom.","commit_id":"8f4126a1da43edd8a531d89a2ad81c2b7ea02673"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"447946955a1ae15a0ec1700422522fd78786af8a","unresolved":false,"context_lines":[{"line_number":339,"context_line":"It can also be used to determine the `min_microversion` and `max_microversion`"},{"line_number":340,"context_line":"supported by the API. If an API does not support microversions, the values for"},{"line_number":341,"context_line":"both will be ``None``. It will also contain values for `next_min_version` and"},{"line_number":342,"context_line":"`not_before` if they exist for the endpoint, or ``None`` if they do not."},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"Note that endpoint filter-related arguments can be omitted from calls to"},{"line_number":345,"context_line":"``Adapter.get_endpoint_data``, in which case they are gleaned from those set"}],"source_content_type":"text/x-rst","patch_set":3,"id":"1f1a1f67_3e074485","line":342,"in_reply_to":"1f1a1f67_b59ab36b","updated":"2017-07-14 17:59:06.000000000","message":"Present-and-None is in keeping with the paradigm used by min_microversion and max_microversion.","commit_id":"8f4126a1da43edd8a531d89a2ad81c2b7ea02673"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"da70e3c792df19dd8d0bde668cc73acccdf20177","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"It can also be used to determine the `min_microversion` and `max_microversion`"},{"line_number":351,"context_line":"supported by the API. If an API does not support microversions, the values for"},{"line_number":352,"context_line":"both will be ``None``. It will also contain values for `next_min_version` and"},{"line_number":353,"context_line":"`not_before` if they exist for the endpoint, or ``None`` if they do not. The"},{"line_number":354,"context_line":":class:`keystoneauth1.discovery.EndpointData` object will always contain"},{"line_number":355,"context_line":"microversion related attributes regardless of whether the REST document does"},{"line_number":356,"context_line":"or not."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1f1a1f67_2164c9b8","line":353,"range":{"start_line":352,"start_character":23,"end_line":353,"end_character":72},"updated":"2017-07-14 18:23:54.000000000","message":"This is not correct. *Unless* a service is raising their minimum microversion, these keys will not be present. And since raising the minimum should be an exceedingly rare event, it is likely that these will ever be encountered in the wild. From the API-WG guideline on microversions[0]:\n\n  \"If there is no planned change to the minimum version,\n  the response can omit the ‘next_min_version’ and\n  ‘not_before’ values.\"\n\nAnd since responses currently do not include these keys, a service will not add them until such time as they need to should they decide to raise the minimum microversion.\n\n[0] http://specs.openstack.org/openstack/api-wg/guidelines/microversion_specification.html#version-discovery","commit_id":"15e935f312eec4a1884c896baf9cbee304adcdce"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2972e1e273ae8e6d68ccdd54a990a5d9e7d709e4","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"It can also be used to determine the `min_microversion` and `max_microversion`"},{"line_number":351,"context_line":"supported by the API. If an API does not support microversions, the values for"},{"line_number":352,"context_line":"both will be ``None``. It will also contain values for `next_min_version` and"},{"line_number":353,"context_line":"`not_before` if they exist for the endpoint, or ``None`` if they do not. The"},{"line_number":354,"context_line":":class:`keystoneauth1.discovery.EndpointData` object will always contain"},{"line_number":355,"context_line":"microversion related attributes regardless of whether the REST document does"},{"line_number":356,"context_line":"or not."}],"source_content_type":"text/x-rst","patch_set":6,"id":"1f1a1f67_51e2ee30","line":353,"range":{"start_line":352,"start_character":23,"end_line":353,"end_character":72},"in_reply_to":"1f1a1f67_2164c9b8","updated":"2017-07-14 21:25:59.000000000","message":"The *discovery document* can omit them, but the *EndpointData* includes them (default: None) for consistency.","commit_id":"15e935f312eec4a1884c896baf9cbee304adcdce"}],"keystoneauth1/discover.py":[{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"54c6958de66d3ff23c1255683d44ac3fdc06aa22","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                             \u0027min_microversion\u0027: min_microversion,"},{"line_number":423,"context_line":"                             \u0027max_microversion\u0027: max_microversion,"},{"line_number":424,"context_line":"                             \u0027next_min_version\u0027: next_min_version,"},{"line_number":425,"context_line":"                             \u0027not_before\u0027: not_before,"},{"line_number":426,"context_line":"                             \u0027raw_status\u0027: v[\u0027status\u0027]})"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        versions.sort(key\u003dlambda v: v[\u0027version\u0027], reverse\u003dreverse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_9589f727","line":425,"updated":"2017-07-12 13:00:37.000000000","message":"If there is no next_min, these should be omitted.","commit_id":"8f4126a1da43edd8a531d89a2ad81c2b7ea02673"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0ba1ea0e901235d342978ad194ba1a404c66ca9","unresolved":false,"context_lines":[{"line_number":422,"context_line":"                             \u0027min_microversion\u0027: min_microversion,"},{"line_number":423,"context_line":"                             \u0027max_microversion\u0027: max_microversion,"},{"line_number":424,"context_line":"                             \u0027next_min_version\u0027: next_min_version,"},{"line_number":425,"context_line":"                             \u0027not_before\u0027: not_before,"},{"line_number":426,"context_line":"                             \u0027raw_status\u0027: v[\u0027status\u0027]})"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        versions.sort(key\u003dlambda v: v[\u0027version\u0027], reverse\u003dreverse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_6656b309","line":425,"in_reply_to":"1f1a1f67_9589f727","updated":"2017-07-12 14:09:05.000000000","message":"Well, with the other fields (e.g. min/max_microversion) we\u0027ve taken the path of including them as None if they weren\u0027t specified.  We should be consistent either way.","commit_id":"8f4126a1da43edd8a531d89a2ad81c2b7ea02673"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"da70e3c792df19dd8d0bde668cc73acccdf20177","unresolved":false,"context_lines":[{"line_number":391,"context_line":"                max_microversion \u003d v.get(\u0027version\u0027) or None"},{"line_number":392,"context_line":"            if max_microversion:"},{"line_number":393,"context_line":"                max_microversion \u003d normalize_version_number(max_microversion)"},{"line_number":394,"context_line":"            next_min_version \u003d v.get(\u0027next_min_version\u0027) or None"},{"line_number":395,"context_line":"            if next_min_version:"},{"line_number":396,"context_line":"                next_min_version \u003d normalize_version_number(next_min_version)"},{"line_number":397,"context_line":"            not_before \u003d v.get(\u0027not_before\u0027) or None"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_81ca7d6a","line":394,"range":{"start_line":394,"start_character":31,"end_line":394,"end_character":64},"updated":"2017-07-14 18:23:54.000000000","message":"I realize you\u0027re just following the pattern of the above statements, but the \u0027or None\u0027 is redundant. dict.get() will return None if the key is not present.","commit_id":"15e935f312eec4a1884c896baf9cbee304adcdce"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2972e1e273ae8e6d68ccdd54a990a5d9e7d709e4","unresolved":false,"context_lines":[{"line_number":391,"context_line":"                max_microversion \u003d v.get(\u0027version\u0027) or None"},{"line_number":392,"context_line":"            if max_microversion:"},{"line_number":393,"context_line":"                max_microversion \u003d normalize_version_number(max_microversion)"},{"line_number":394,"context_line":"            next_min_version \u003d v.get(\u0027next_min_version\u0027) or None"},{"line_number":395,"context_line":"            if next_min_version:"},{"line_number":396,"context_line":"                next_min_version \u003d normalize_version_number(next_min_version)"},{"line_number":397,"context_line":"            not_before \u003d v.get(\u0027not_before\u0027) or None"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_b1c6e299","line":394,"range":{"start_line":394,"start_character":31,"end_line":394,"end_character":64},"in_reply_to":"1f1a1f67_81ca7d6a","updated":"2017-07-14 21:25:59.000000000","message":"No, I believe the point here is to convert \"\" (empty string) to None.","commit_id":"15e935f312eec4a1884c896baf9cbee304adcdce"},{"author":{"_account_id":1063,"name":"Ed Leafe","email":"ed@leafe.com","username":"ed-leafe"},"change_message_id":"da70e3c792df19dd8d0bde668cc73acccdf20177","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                             \u0027collection\u0027: collection_url,"},{"line_number":422,"context_line":"                             \u0027min_microversion\u0027: min_microversion,"},{"line_number":423,"context_line":"                             \u0027max_microversion\u0027: max_microversion,"},{"line_number":424,"context_line":"                             \u0027next_min_version\u0027: next_min_version,"},{"line_number":425,"context_line":"                             \u0027not_before\u0027: not_before,"},{"line_number":426,"context_line":"                             \u0027raw_status\u0027: v[\u0027status\u0027]})"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        versions.sort(key\u003dlambda v: v[\u0027version\u0027], reverse\u003dreverse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_01854d08","line":425,"range":{"start_line":424,"start_character":0,"end_line":425,"end_character":54},"updated":"2017-07-14 18:23:54.000000000","message":"I would prefer that these not be added in all cases. Instead, create the dict as currently defined, and then if they are present, update the dict with their values.","commit_id":"15e935f312eec4a1884c896baf9cbee304adcdce"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2972e1e273ae8e6d68ccdd54a990a5d9e7d709e4","unresolved":false,"context_lines":[{"line_number":421,"context_line":"                             \u0027collection\u0027: collection_url,"},{"line_number":422,"context_line":"                             \u0027min_microversion\u0027: min_microversion,"},{"line_number":423,"context_line":"                             \u0027max_microversion\u0027: max_microversion,"},{"line_number":424,"context_line":"                             \u0027next_min_version\u0027: next_min_version,"},{"line_number":425,"context_line":"                             \u0027not_before\u0027: not_before,"},{"line_number":426,"context_line":"                             \u0027raw_status\u0027: v[\u0027status\u0027]})"},{"line_number":427,"context_line":""},{"line_number":428,"context_line":"        versions.sort(key\u003dlambda v: v[\u0027version\u0027], reverse\u003dreverse)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1f1a1f67_51178eee","line":425,"range":{"start_line":424,"start_character":0,"end_line":425,"end_character":54},"in_reply_to":"1f1a1f67_01854d08","updated":"2017-07-14 21:25:59.000000000","message":"Still disagreeing.  This method claims to provide \"normalized\" version data.  We want to make it as easy as possible for the consumer to use it and rely on its format.","commit_id":"15e935f312eec4a1884c896baf9cbee304adcdce"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0688b02b0ce14ba6b5531a554254132684370a60","unresolved":false,"context_lines":[{"line_number":391,"context_line":"                max_microversion \u003d v.get(\u0027version\u0027) or None"},{"line_number":392,"context_line":"            if max_microversion:"},{"line_number":393,"context_line":"                max_microversion \u003d normalize_version_number(max_microversion)"},{"line_number":394,"context_line":"            next_min_version \u003d v.get(\u0027next_min_version\u0027) or None"},{"line_number":395,"context_line":"            if next_min_version:"},{"line_number":396,"context_line":"                next_min_version \u003d normalize_version_number(next_min_version)"},{"line_number":397,"context_line":"            not_before \u003d v.get(\u0027not_before\u0027) or None"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f1a1f67_127fd967","line":394,"updated":"2017-07-14 20:02:21.000000000","message":".get() defaults to None if the key doesn\u0027t exist anyway, so we might be able to just get away with:\n\n  next_min_version \u003d v.get(\u0027next_min_version\u0027)","commit_id":"3230e62e64c27cc974cd987b63cb5031d8ffb08d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b9b3e3318bde269e923d3518e5a8496b5273227a","unresolved":false,"context_lines":[{"line_number":391,"context_line":"                max_microversion \u003d v.get(\u0027version\u0027) or None"},{"line_number":392,"context_line":"            if max_microversion:"},{"line_number":393,"context_line":"                max_microversion \u003d normalize_version_number(max_microversion)"},{"line_number":394,"context_line":"            next_min_version \u003d v.get(\u0027next_min_version\u0027) or None"},{"line_number":395,"context_line":"            if next_min_version:"},{"line_number":396,"context_line":"                next_min_version \u003d normalize_version_number(next_min_version)"},{"line_number":397,"context_line":"            not_before \u003d v.get(\u0027not_before\u0027) or None"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f1a1f67_11c0f64f","line":394,"in_reply_to":"1f1a1f67_127fd967","updated":"2017-07-14 21:26:25.000000000","message":"We\u0027re normalizing \"\" (empty string) to None.","commit_id":"3230e62e64c27cc974cd987b63cb5031d8ffb08d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0688b02b0ce14ba6b5531a554254132684370a60","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            next_min_version \u003d v.get(\u0027next_min_version\u0027) or None"},{"line_number":395,"context_line":"            if next_min_version:"},{"line_number":396,"context_line":"                next_min_version \u003d normalize_version_number(next_min_version)"},{"line_number":397,"context_line":"            not_before \u003d v.get(\u0027not_before\u0027) or None"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"            self_url \u003d None"},{"line_number":400,"context_line":"            collection_url \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f1a1f67_f281fd4b","line":397,"updated":"2017-07-14 20:02:21.000000000","message":"Same comment here.","commit_id":"3230e62e64c27cc974cd987b63cb5031d8ffb08d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b9b3e3318bde269e923d3518e5a8496b5273227a","unresolved":false,"context_lines":[{"line_number":394,"context_line":"            next_min_version \u003d v.get(\u0027next_min_version\u0027) or None"},{"line_number":395,"context_line":"            if next_min_version:"},{"line_number":396,"context_line":"                next_min_version \u003d normalize_version_number(next_min_version)"},{"line_number":397,"context_line":"            not_before \u003d v.get(\u0027not_before\u0027) or None"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"            self_url \u003d None"},{"line_number":400,"context_line":"            collection_url \u003d None"}],"source_content_type":"text/x-python","patch_set":7,"id":"1f1a1f67_f1b69afa","line":397,"in_reply_to":"1f1a1f67_f281fd4b","updated":"2017-07-14 21:26:25.000000000","message":"Ditto","commit_id":"3230e62e64c27cc974cd987b63cb5031d8ffb08d"}],"keystoneauth1/tests/unit/test_discovery.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f0ba1ea0e901235d342978ad194ba1a404c66ca9","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                 \u0027next_min_version\u0027: \u00272.1\u0027, \u0027not_before\u0027: \u00272019-07-01\u0027},"},{"line_number":443,"context_line":"                {\u0027min_microversion\u0027: (2, 0), \u0027max_microversion\u0027: (2, 2),"},{"line_number":444,"context_line":"                 \u0027next_min_version\u0027: (2, 1), \u0027not_before\u0027: \u00272019-07-01\u0027})"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # Badly-formatted min_version"},{"line_number":447,"context_line":"        test_exc({\u0027min_version\u0027: \u0027foo\u0027, \u0027max_version\u0027: \u00272.1\u0027})"},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_667d936d","line":445,"updated":"2017-07-12 14:09:05.000000000","message":"Maybe add a test_exc with malformed next_min_version","commit_id":"8f4126a1da43edd8a531d89a2ad81c2b7ea02673"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"447946955a1ae15a0ec1700422522fd78786af8a","unresolved":false,"context_lines":[{"line_number":442,"context_line":"                 \u0027next_min_version\u0027: \u00272.1\u0027, \u0027not_before\u0027: \u00272019-07-01\u0027},"},{"line_number":443,"context_line":"                {\u0027min_microversion\u0027: (2, 0), \u0027max_microversion\u0027: (2, 2),"},{"line_number":444,"context_line":"                 \u0027next_min_version\u0027: (2, 1), \u0027not_before\u0027: \u00272019-07-01\u0027})"},{"line_number":445,"context_line":""},{"line_number":446,"context_line":"        # Badly-formatted min_version"},{"line_number":447,"context_line":"        test_exc({\u0027min_version\u0027: \u0027foo\u0027, \u0027max_version\u0027: \u00272.1\u0027})"},{"line_number":448,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1f1a1f67_1ef4885a","line":445,"in_reply_to":"1f1a1f67_667d936d","updated":"2017-07-14 17:59:06.000000000","message":"Done","commit_id":"8f4126a1da43edd8a531d89a2ad81c2b7ea02673"}]}
