)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"d2736cdecaa279b515426d58a2a1611cb747ec0d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"a release."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"The method \"discover_versions\" is renamed to \"get_versioned_data\" - since"},{"line_number":20,"context_line":"the work it does is actually to get a versioned EndpointData object."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"It also now returns a new EndpointData object instead of mutating the"},{"line_number":23,"context_line":"existing one. Especially with the name change, mutation seemed really"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5f201791_c709932c","line":20,"updated":"2017-06-23 23:23:33.000000000","message":"++","commit_id":"b59f330e3c746e5aec8382feebe17701c7bcd193"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"d2736cdecaa279b515426d58a2a1611cb747ec0d","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"It also now returns a new EndpointData object instead of mutating the"},{"line_number":23,"context_line":"existing one. Especially with the name change, mutation seemed really"},{"line_number":24,"context_line":"off."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Change-Id: Ifeeac7af1ebd9d2d59a30d4503c8bcc0137e9370"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5f201791_c722b3a4","line":24,"updated":"2017-06-23 23:23:33.000000000","message":"++ yay","commit_id":"b59f330e3c746e5aec8382feebe17701c7bcd193"}],"keystoneauth1/discover.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"9588727974f258d5a736313cdcb6a70192c03cc7","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        return self.url"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"def get_discovery(session, url, endpoint_cache\u003dNone, authenticated\u003dFalse):"},{"line_number":433,"context_line":"    \"\"\"Return the discovery object for a URL."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    Check the session and the plugin cache to see if we have already"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_0db7f8da","line":432,"range":{"start_line":432,"start_character":4,"end_line":432,"end_character":17},"updated":"2017-06-07 17:41:08.000000000","message":"BE 100% sure you want this as a public interface. IT cannot be removed once it lands.\n\nDoesn\u0027t look out of place though.","commit_id":"0ce1db1ee3f7e663a81307d000335d4da7f52e5e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"ec1344f179c6553b0b073421975af6a20ae7bbca","unresolved":false,"context_lines":[{"line_number":429,"context_line":"        return self.url"},{"line_number":430,"context_line":""},{"line_number":431,"context_line":""},{"line_number":432,"context_line":"def get_discovery(session, url, endpoint_cache\u003dNone, authenticated\u003dFalse):"},{"line_number":433,"context_line":"    \"\"\"Return the discovery object for a URL."},{"line_number":434,"context_line":""},{"line_number":435,"context_line":"    Check the session and the plugin cache to see if we have already"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f0e0f27_790ada8a","line":432,"range":{"start_line":432,"start_character":4,"end_line":432,"end_character":17},"in_reply_to":"df140735_0db7f8da","updated":"2017-06-09 14:06:03.000000000","message":"Ok. Yes. I do believe it\u0027s important to expose this. I think ksa will wind up doing everything people need - but having access to the discovery mechanism in a direct way will help people who need to do some logic we haven\u0027t thought of to not have to re-invent things.","commit_id":"0ce1db1ee3f7e663a81307d000335d4da7f52e5e"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4733d805e53b8977bb3f8f62a106fd75d9405cb8","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        :param session: A session object that can be used for communication."},{"line_number":334,"context_line":"        :type session: keystoneauth1.session.Session"},{"line_number":335,"context_line":"        :param tuple version: The minimum version number required for this"},{"line_number":336,"context_line":"                              endpoint. (optional)"},{"line_number":337,"context_line":"        :param dict allow: Extra filters to pass when discovering API"},{"line_number":338,"context_line":"                           versions. (optional)"},{"line_number":339,"context_line":"        :param bool allow_version_hack: Allow keystoneauth to hack up catalog"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_accc5061","line":336,"range":{"start_line":336,"start_character":41,"end_line":336,"end_character":49},"updated":"2017-06-13 21:51:31.000000000","message":"It looks required?","commit_id":"572b280f63cdec7f9de530ea52d9b6bdf3ac76b1"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"9ad8cd8e31f2dd5f19f396142e65e09305bb791f","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        :param session: A session object that can be used for communication."},{"line_number":334,"context_line":"        :type session: keystoneauth1.session.Session"},{"line_number":335,"context_line":"        :param tuple version: The minimum version number required for this"},{"line_number":336,"context_line":"                              endpoint. (optional)"},{"line_number":337,"context_line":"        :param dict allow: Extra filters to pass when discovering API"},{"line_number":338,"context_line":"                           versions. (optional)"},{"line_number":339,"context_line":"        :param bool allow_version_hack: Allow keystoneauth to hack up catalog"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_acd690c2","line":336,"range":{"start_line":336,"start_character":41,"end_line":336,"end_character":49},"in_reply_to":"7f231b9d_accc5061","updated":"2017-06-13 21:52:54.000000000","message":"++","commit_id":"572b280f63cdec7f9de530ea52d9b6bdf3ac76b1"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"3049c7096c9bbbc91753e5b17499a2150c5b6ee6","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        :param session: A session object that can be used for communication."},{"line_number":334,"context_line":"        :type session: keystoneauth1.session.Session"},{"line_number":335,"context_line":"        :param tuple version: The minimum version number required for this"},{"line_number":336,"context_line":"                              endpoint. (optional)"},{"line_number":337,"context_line":"        :param dict allow: Extra filters to pass when discovering API"},{"line_number":338,"context_line":"                           versions. (optional)"},{"line_number":339,"context_line":"        :param bool allow_version_hack: Allow keystoneauth to hack up catalog"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_b8680a21","line":336,"range":{"start_line":336,"start_character":41,"end_line":336,"end_character":49},"in_reply_to":"7f231b9d_accc5061","updated":"2017-06-14 02:16:40.000000000","message":"Done","commit_id":"572b280f63cdec7f9de530ea52d9b6bdf3ac76b1"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"4733d805e53b8977bb3f8f62a106fd75d9405cb8","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                                                         invalid HTTP response."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        :return: A valid endpoint URL or None if not available."},{"line_number":351,"context_line":"        :rtype: string or None"},{"line_number":352,"context_line":"        \"\"\""},{"line_number":353,"context_line":"        if not allow:"},{"line_number":354,"context_line":"            allow \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_8c4994d1","line":351,"updated":"2017-06-13 21:51:31.000000000","message":"I don\u0027t see this returning anything","commit_id":"572b280f63cdec7f9de530ea52d9b6bdf3ac76b1"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"9ad8cd8e31f2dd5f19f396142e65e09305bb791f","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                                                         invalid HTTP response."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        :return: A valid endpoint URL or None if not available."},{"line_number":351,"context_line":"        :rtype: string or None"},{"line_number":352,"context_line":"        \"\"\""},{"line_number":353,"context_line":"        if not allow:"},{"line_number":354,"context_line":"            allow \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_cc042c4d","line":351,"in_reply_to":"7f231b9d_8c4994d1","updated":"2017-06-13 21:52:54.000000000","message":"It returns None in one case... but is missing other returns.\n\nThis is why we need tests.\n\nGood catch.","commit_id":"572b280f63cdec7f9de530ea52d9b6bdf3ac76b1"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"3049c7096c9bbbc91753e5b17499a2150c5b6ee6","unresolved":false,"context_lines":[{"line_number":348,"context_line":"                                                         invalid HTTP response."},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        :return: A valid endpoint URL or None if not available."},{"line_number":351,"context_line":"        :rtype: string or None"},{"line_number":352,"context_line":"        \"\"\""},{"line_number":353,"context_line":"        if not allow:"},{"line_number":354,"context_line":"            allow \u003d {}"}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_58c8d620","line":351,"in_reply_to":"7f231b9d_cc042c4d","updated":"2017-06-14 02:16:40.000000000","message":"It mutates the EndpointData object.\n\nThere is actually a lot of testing already - it blows up spectacularly when something is wrong. :)\n\nThat said - I agree about this being a new public method - so I\u0027ll see if I can\u0027t cook up some new testing methods specifically for the interface.","commit_id":"572b280f63cdec7f9de530ea52d9b6bdf3ac76b1"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"59da7666296e0dfcaf251e6123d547dba82caf55","unresolved":false,"context_lines":[{"line_number":340,"context_line":"                                        URLS to support older schemes."},{"line_number":341,"context_line":"                                        (optional, default True)"},{"line_number":342,"context_line":"        :param dict endpoint_cache: A dict to be used for caching results, in"},{"line_number":343,"context_line":"                                    addition to caching them on the Session."},{"line_number":344,"context_line":"        :param bool authenticated: Include a token in the discovery call."},{"line_number":345,"context_line":"                                   (optional) Defaults to False."},{"line_number":346,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7f231b9d_1b869814","line":343,"updated":"2017-06-15 18:07:57.000000000","message":"nit: (optional)","commit_id":"a337e788c5ae1df41938ff80dec9c5125f1870c1"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3c02abac86b02761ce1245e0677e48cb7e67da4a","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        This function is internal to keystoneauth1."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        :param str endpoint_data: the endpoint_data in question"},{"line_number":418,"context_line":"        :param bool allow_version_hacks: Whether or not to allow version hacks"},{"line_number":419,"context_line":"                                         to be applied. (defaults to True)"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"7f231b9d_049bb765","line":417,"range":{"start_line":417,"start_character":19,"end_line":417,"end_character":32},"updated":"2017-06-16 15:54:14.000000000","message":"It looks like this param got dropped.","commit_id":"a337e788c5ae1df41938ff80dec9c5125f1870c1"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"dfc180e46b2cb0b659a1aa504a017a51df7ead22","unresolved":false,"context_lines":[{"line_number":414,"context_line":""},{"line_number":415,"context_line":"        This function is internal to keystoneauth1."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        :param str endpoint_data: the endpoint_data in question"},{"line_number":418,"context_line":"        :param bool allow_version_hacks: Whether or not to allow version hacks"},{"line_number":419,"context_line":"                                         to be applied. (defaults to True)"},{"line_number":420,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"5f201791_76960af3","line":417,"range":{"start_line":417,"start_character":19,"end_line":417,"end_character":32},"in_reply_to":"7f231b9d_049bb765","updated":"2017-06-23 09:14:13.000000000","message":"Done","commit_id":"a337e788c5ae1df41938ff80dec9c5125f1870c1"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"3c02abac86b02761ce1245e0677e48cb7e67da4a","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        This function is internal to keystoneauth1."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        :param str endpoint_data: the endpoint_data in question"},{"line_number":418,"context_line":"        :param bool allow_version_hacks: Whether or not to allow version hacks"},{"line_number":419,"context_line":"                                         to be applied. (defaults to True)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :returns: Either the unversioned url or the one from the catalog to try"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f231b9d_a476433d","line":418,"range":{"start_line":418,"start_character":20,"end_line":418,"end_character":39},"updated":"2017-06-16 15:54:14.000000000","message":"I\u0027d prefer it if this typo was fixed in this patch rather than in the next one","commit_id":"a337e788c5ae1df41938ff80dec9c5125f1870c1"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"dfc180e46b2cb0b659a1aa504a017a51df7ead22","unresolved":false,"context_lines":[{"line_number":415,"context_line":"        This function is internal to keystoneauth1."},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"        :param str endpoint_data: the endpoint_data in question"},{"line_number":418,"context_line":"        :param bool allow_version_hacks: Whether or not to allow version hacks"},{"line_number":419,"context_line":"                                         to be applied. (defaults to True)"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        :returns: Either the unversioned url or the one from the catalog to try"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f201791_36a09243","line":418,"range":{"start_line":418,"start_character":20,"end_line":418,"end_character":39},"in_reply_to":"7f231b9d_a476433d","updated":"2017-06-23 09:14:13.000000000","message":"Done","commit_id":"a337e788c5ae1df41938ff80dec9c5125f1870c1"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3f0244ab3f926b0be1b80308238019a8e41281c8","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self.min_microversion \u003d min_microversion"},{"line_number":333,"context_line":"        self.max_microversion \u003d max_microversion"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def _copy(self):"},{"line_number":336,"context_line":"        return EndpointData("},{"line_number":337,"context_line":"            catalog_url\u003dself.catalog_url,"},{"line_number":338,"context_line":"            service_url\u003dself.service_url,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_64cf4f56","line":335,"updated":"2017-06-25 23:55:13.000000000","message":"__copy__ ?","commit_id":"73a31cac26e1e39812c8991bc99e0f6b95ffc645"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"0568afb625bbe94ddd46b4447f9af382396c829f","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        self.min_microversion \u003d min_microversion"},{"line_number":333,"context_line":"        self.max_microversion \u003d max_microversion"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"    def _copy(self):"},{"line_number":336,"context_line":"        return EndpointData("},{"line_number":337,"context_line":"            catalog_url\u003dself.catalog_url,"},{"line_number":338,"context_line":"            service_url\u003dself.service_url,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_84570b59","line":335,"in_reply_to":"5f201791_64cf4f56","updated":"2017-06-26 00:04:32.000000000","message":"Can do.","commit_id":"73a31cac26e1e39812c8991bc99e0f6b95ffc645"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3f0244ab3f926b0be1b80308238019a8e41281c8","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"@positional()"},{"line_number":457,"context_line":"def get_discovery(session, url, cache\u003dNone, authenticated\u003dFalse):"},{"line_number":458,"context_line":"    \"\"\"Return the discovery object for a URL."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    Check the session and the plugin cache to see if we have already"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_643d0f2a","line":457,"updated":"2017-06-25 23:55:13.000000000","message":"This feels weird to have the caching implementation here. Why doesn\u0027t it stay on the session? We can make that more public if it helps.","commit_id":"73a31cac26e1e39812c8991bc99e0f6b95ffc645"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"0568afb625bbe94ddd46b4447f9af382396c829f","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"@positional()"},{"line_number":457,"context_line":"def get_discovery(session, url, cache\u003dNone, authenticated\u003dFalse):"},{"line_number":458,"context_line":"    \"\"\"Return the discovery object for a URL."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    Check the session and the plugin cache to see if we have already"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_a45e8773","line":457,"in_reply_to":"5f201791_643d0f2a","updated":"2017-06-26 00:04:32.000000000","message":"We could for sure. This was more an attempt to locate all of the logic related to discovery here and get Session and Auth out of the business.","commit_id":"73a31cac26e1e39812c8991bc99e0f6b95ffc645"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"fc689b7fe29d982861dd9423ddd07f441e698ab0","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"@positional()"},{"line_number":457,"context_line":"def get_discovery(session, url, cache\u003dNone, authenticated\u003dFalse):"},{"line_number":458,"context_line":"    \"\"\"Return the discovery object for a URL."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"    Check the session and the plugin cache to see if we have already"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_481c59c0","line":457,"in_reply_to":"5f201791_a45e8773","updated":"2017-06-26 10:53:40.000000000","message":"Oh, also, it can\u0027t stay on the session because it wasn\u0027t on the session - it was on the base identity plugin.","commit_id":"73a31cac26e1e39812c8991bc99e0f6b95ffc645"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3f0244ab3f926b0be1b80308238019a8e41281c8","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    # Finally check the auth cache associated with the Session."},{"line_number":506,"context_line":"    if session.auth:"},{"line_number":507,"context_line":"        caches.append(session.auth._discovery_cache)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    for cache in caches:"},{"line_number":510,"context_line":"        disc \u003d cache.get(url)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_84fb8b77","line":507,"range":{"start_line":507,"start_character":21,"end_line":507,"end_character":22},"updated":"2017-06-25 23:55:13.000000000","message":"should have the same hasattr check.","commit_id":"73a31cac26e1e39812c8991bc99e0f6b95ffc645"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"0568afb625bbe94ddd46b4447f9af382396c829f","unresolved":false,"context_lines":[{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    # Finally check the auth cache associated with the Session."},{"line_number":506,"context_line":"    if session.auth:"},{"line_number":507,"context_line":"        caches.append(session.auth._discovery_cache)"},{"line_number":508,"context_line":""},{"line_number":509,"context_line":"    for cache in caches:"},{"line_number":510,"context_line":"        disc \u003d cache.get(url)"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_444d73c2","line":507,"range":{"start_line":507,"start_character":21,"end_line":507,"end_character":22},"in_reply_to":"5f201791_84fb8b77","updated":"2017-06-26 00:04:32.000000000","message":"++","commit_id":"73a31cac26e1e39812c8991bc99e0f6b95ffc645"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3fc88e7876ae365dabe06d7157beb92297caa1a5","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    raise TypeError(\u0027Invalid version specified: %s\u0027 % version)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"def version_to_string(version):"},{"line_number":108,"context_line":"    \"\"\"Turn a version tuple into a string.\"\"\""},{"line_number":109,"context_line":"    return \".\".join([str(x) for x in version])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"def version_match(required, candidate):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_17ab991d","line":109,"range":{"start_line":107,"start_character":0,"end_line":109,"end_character":46},"updated":"2017-06-29 21:31:18.000000000","message":"Golly, this seems like it should be in oslo_utils.versionutils.","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"023e23a00933dfedf1010719be76c3927f8e99f5","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            for link in links:"},{"line_number":240,"context_line":"                try:"},{"line_number":241,"context_line":"                    rel \u003d link[\u0027rel\u0027]"},{"line_number":242,"context_line":"                    url \u003d _combine_relative_url(self._url, link[\u0027href\u0027])"},{"line_number":243,"context_line":"                except (KeyError, TypeError):"},{"line_number":244,"context_line":"                    _LOGGER.info(\u0027Skipping invalid version link. \u0027"},{"line_number":245,"context_line":"                                 \u0027Missing link URL or relationship.\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_256b5fb7","line":242,"updated":"2017-06-27 11:19:37.000000000","message":"is it better doing this here than in L39 (as the original code did)?\n\nWe\u0027re changing the return of get_versioned_data. Do we expect people to use that method directly? Or is it always called via this?","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4e56cebee4892157c2f26792dbd22253c404256e","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            for link in links:"},{"line_number":240,"context_line":"                try:"},{"line_number":241,"context_line":"                    rel \u003d link[\u0027rel\u0027]"},{"line_number":242,"context_line":"                    url \u003d _combine_relative_url(self._url, link[\u0027href\u0027])"},{"line_number":243,"context_line":"                except (KeyError, TypeError):"},{"line_number":244,"context_line":"                    _LOGGER.info(\u0027Skipping invalid version link. \u0027"},{"line_number":245,"context_line":"                                 \u0027Missing link URL or relationship.\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_e551e7da","line":242,"in_reply_to":"5f201791_256b5fb7","updated":"2017-06-27 11:22:27.000000000","message":"With this, we\u0027re also chaging the behavior of get_endpoint_data (in the plugin), that is basically returning the result of calling get_versioned_data below","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"c53609219f9419b477ad9e64aaf4290a9d867daf","unresolved":false,"context_lines":[{"line_number":239,"context_line":"            for link in links:"},{"line_number":240,"context_line":"                try:"},{"line_number":241,"context_line":"                    rel \u003d link[\u0027rel\u0027]"},{"line_number":242,"context_line":"                    url \u003d _combine_relative_url(self._url, link[\u0027href\u0027])"},{"line_number":243,"context_line":"                except (KeyError, TypeError):"},{"line_number":244,"context_line":"                    _LOGGER.info(\u0027Skipping invalid version link. \u0027"},{"line_number":245,"context_line":"                                 \u0027Missing link URL or relationship.\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_84b68789","line":242,"in_reply_to":"5f201791_e551e7da","updated":"2017-06-28 12:33:46.000000000","message":"It should be the same behavior - get_endpoint_data in the plugin should be returning an EndpointData from get_versioned_data. This method is version_data which is just unfortunately similarly named.\n\nAs for the url joining - up until this patch there isn\u0027t a method for a user to get a Discovery object, so pre-joining this here for ease later should be fine.","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3fc88e7876ae365dabe06d7157beb92297caa1a5","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                           (optional)"},{"line_number":378,"context_line":"        :param bool authenticated: Include a token in the discovery call."},{"line_number":379,"context_line":"                                   (optional) Defaults to False."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :raises keystoneauth1.exceptions.http.HttpError: An error from an"},{"line_number":382,"context_line":"                                                         invalid HTTP response."},{"line_number":383,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_72a9bbdd","line":380,"updated":"2017-06-29 21:31:18.000000000","message":"doc :return: value","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3fc88e7876ae365dabe06d7157beb92297caa1a5","unresolved":false,"context_lines":[{"line_number":378,"context_line":"        :param bool authenticated: Include a token in the discovery call."},{"line_number":379,"context_line":"                                   (optional) Defaults to False."},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"        :raises keystoneauth1.exceptions.http.HttpError: An error from an"},{"line_number":382,"context_line":"                                                         invalid HTTP response."},{"line_number":383,"context_line":"        \"\"\""},{"line_number":384,"context_line":"        if not allow:"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_f2b4ab37","line":381,"range":{"start_line":381,"start_character":46,"end_line":381,"end_character":55},"updated":"2017-06-29 21:31:18.000000000","message":"and DiscoveryFailure and ConnectionError","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"26ec4b060c900311e1ee11afbebac102edf2cf8d","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                raise exceptions.DiscoveryFailure("},{"line_number":437,"context_line":"                    \"Version {version} requested, but was not found\".format("},{"line_number":438,"context_line":"                        version\u003dversion_to_string(version)))"},{"line_number":439,"context_line":"            new_data.service_url \u003d url"},{"line_number":440,"context_line":"        return new_data"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def _get_catalog_discover_hack(self, allow_version_hack\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_8268b6f4","line":439,"range":{"start_line":439,"start_character":0,"end_line":439,"end_character":38},"updated":"2017-06-28 14:01:27.000000000","message":"previously, this was\n\n    url \u003d urllib.parse.urljoin(vers_url.rstrip(\u0027/\u0027) + \u0027/\u0027, url)\n    endpoint_data.service_url \u003d url\n\nI am not getting how the behavior is not changed, since the URL in the endpoint data is not the same anymore","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"0d43f5039f10afc9c7a8b0d882207010463db392","unresolved":false,"context_lines":[{"line_number":436,"context_line":"                raise exceptions.DiscoveryFailure("},{"line_number":437,"context_line":"                    \"Version {version} requested, but was not found\".format("},{"line_number":438,"context_line":"                        version\u003dversion_to_string(version)))"},{"line_number":439,"context_line":"            new_data.service_url \u003d url"},{"line_number":440,"context_line":"        return new_data"},{"line_number":441,"context_line":""},{"line_number":442,"context_line":"    def _get_catalog_discover_hack(self, allow_version_hack\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_a5ba9cbd","line":439,"range":{"start_line":439,"start_character":0,"end_line":439,"end_character":38},"in_reply_to":"5f201791_8268b6f4","updated":"2017-06-28 14:20:48.000000000","message":"Yah - good question. We moved the rstrip + / to inside of data_for which url_for calls. This means that new_data.service_url is getting the trailing \u0027/\u0027 transformation - we\u0027re just doing it early in the process so that we don\u0027t have to remember to do it every time we call data_for or url_for.","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3fc88e7876ae365dabe06d7157beb92297caa1a5","unresolved":false,"context_lines":[{"line_number":464,"context_line":"    a new discovery object, cache it and return it."},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"    NOTE: This function is expected to be used by keystoneauth and should not"},{"line_number":467,"context_line":"    be needed by users part of normal usage. A normal user should use"},{"line_number":468,"context_line":"    get_endpoint or get_endpoint_data on `keystoneauth.session.Session` or"},{"line_number":469,"context_line":"    endpoint_filters on `keystoneauth.session.Session` or"},{"line_number":470,"context_line":"    `keystoneauth.session.Session`. However, should the user need to perform"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_d2e88f17","line":467,"range":{"start_line":467,"start_character":22,"end_line":467,"end_character":23},"updated":"2017-06-29 21:31:18.000000000","message":"as","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"}],"keystoneauth1/tests/unit/identity/test_identity_common.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"690a8c46a786f73f1e7de3fe527221e776b5e995","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self.assertEqual(self.TEST_COMPUTE_ADMIN + \u0027/v3\u0027, data_v3.url)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_get_versioned_data(self):"},{"line_number":383,"context_line":"        # need to construct list this way for relative"},{"line_number":384,"context_line":"        disc \u003d fixture.DiscoveryList(v2\u003dFalse, v3\u003dFalse)"},{"line_number":385,"context_line":"        disc.add_v2(\u0027v2.0\u0027)"},{"line_number":386,"context_line":"        disc.add_v3(\u0027v3\u0027)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        # Make sure that we don\u0027t do more than one discovery call"},{"line_number":389,"context_line":"        # register responses such that if the discovery URL is hit more than"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_8b02816e","line":386,"range":{"start_line":383,"start_character":8,"end_line":386,"end_character":25},"updated":"2017-06-24 10:30:09.000000000","message":"does it really need to be constructed this way or is this copypasta?","commit_id":"b59f330e3c746e5aec8382feebe17701c7bcd193"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"e8483c2a02f2f8e50bef6e4f316b875b89c36b08","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self.assertEqual(self.TEST_COMPUTE_ADMIN + \u0027/v3\u0027, data_v3.url)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_get_versioned_data(self):"},{"line_number":383,"context_line":"        # need to construct list this way for relative"},{"line_number":384,"context_line":"        disc \u003d fixture.DiscoveryList(v2\u003dFalse, v3\u003dFalse)"},{"line_number":385,"context_line":"        disc.add_v2(\u0027v2.0\u0027)"},{"line_number":386,"context_line":"        disc.add_v3(\u0027v3\u0027)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        # Make sure that we don\u0027t do more than one discovery call"},{"line_number":389,"context_line":"        # register responses such that if the discovery URL is hit more than"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_6e2973e4","line":386,"range":{"start_line":383,"start_character":8,"end_line":386,"end_character":25},"in_reply_to":"5f201791_4e93575c","updated":"2017-06-24 13:56:04.000000000","message":"I have to respin the stack anyway to do the rebase, so I\u0027ll go ahead and fix this.","commit_id":"b59f330e3c746e5aec8382feebe17701c7bcd193"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"e73d6d761db3760816a6fe38dd5e390f08748720","unresolved":false,"context_lines":[{"line_number":380,"context_line":"        self.assertEqual(self.TEST_COMPUTE_ADMIN + \u0027/v3\u0027, data_v3.url)"},{"line_number":381,"context_line":""},{"line_number":382,"context_line":"    def test_get_versioned_data(self):"},{"line_number":383,"context_line":"        # need to construct list this way for relative"},{"line_number":384,"context_line":"        disc \u003d fixture.DiscoveryList(v2\u003dFalse, v3\u003dFalse)"},{"line_number":385,"context_line":"        disc.add_v2(\u0027v2.0\u0027)"},{"line_number":386,"context_line":"        disc.add_v3(\u0027v3\u0027)"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"        # Make sure that we don\u0027t do more than one discovery call"},{"line_number":389,"context_line":"        # register responses such that if the discovery URL is hit more than"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_4e93575c","line":386,"range":{"start_line":383,"start_character":8,"end_line":386,"end_character":25},"in_reply_to":"5f201791_8b02816e","updated":"2017-06-24 13:20:03.000000000","message":"This test doesn\u0027t specific need to do relative. I know a bunch more about the test framework now after having done the next patch - so could update this if you\u0027d like.","commit_id":"b59f330e3c746e5aec8382feebe17701c7bcd193"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"11dd30439d7f8633362458d8a3ca182920337123","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        resps \u003d [{\u0027json\u0027: self.TEST_DISCOVERY}, {\u0027status_code\u0027: 500}]"},{"line_number":224,"context_line":"        self.requests_mock.get(self.TEST_COMPUTE_ADMIN, resps)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        body \u003d \u0027SUCCESS\u0027"},{"line_number":227,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027path\u0027], text\u003dbody)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        # now either of the two sessions I use, it should not cause a second"},{"line_number":230,"context_line":"        # request to the discovery url. Calling discovery directly should also"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_7ebea1b4","line":227,"range":{"start_line":226,"start_character":8,"end_line":227,"end_character":48},"updated":"2017-06-26 19:05:28.000000000","message":"I think this is not really needed, it works with it commented out.","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"ed4d98ab5ae5c9cdf7ef150825b44275a2d4779a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        resps \u003d [{\u0027json\u0027: self.TEST_DISCOVERY}, {\u0027status_code\u0027: 500}]"},{"line_number":224,"context_line":"        self.requests_mock.get(self.TEST_COMPUTE_ADMIN, resps)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"        body \u003d \u0027SUCCESS\u0027"},{"line_number":227,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027path\u0027], text\u003dbody)"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"        # now either of the two sessions I use, it should not cause a second"},{"line_number":230,"context_line":"        # request to the discovery url. Calling discovery directly should also"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_924971b8","line":227,"range":{"start_line":226,"start_character":8,"end_line":227,"end_character":48},"in_reply_to":"5f201791_7ebea1b4","updated":"2017-06-26 19:50:29.000000000","message":"Done","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"11dd30439d7f8633362458d8a3ca182920337123","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        resps \u003d [{\u0027json\u0027: disc}, {\u0027status_code\u0027: 500}]"},{"line_number":478,"context_line":"        self.requests_mock.get(self.TEST_COMPUTE_ADMIN, resps)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        body \u003d \u0027SUCCESS\u0027"},{"line_number":481,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027path\u0027], text\u003dbody)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        a \u003d self.create_auth_plugin()"},{"line_number":484,"context_line":"        s \u003d session.Session(auth\u003da)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_5e32c55f","line":481,"range":{"start_line":480,"start_character":8,"end_line":481,"end_character":49},"updated":"2017-06-26 19:05:28.000000000","message":"not needed","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"ed4d98ab5ae5c9cdf7ef150825b44275a2d4779a","unresolved":false,"context_lines":[{"line_number":477,"context_line":"        resps \u003d [{\u0027json\u0027: disc}, {\u0027status_code\u0027: 500}]"},{"line_number":478,"context_line":"        self.requests_mock.get(self.TEST_COMPUTE_ADMIN, resps)"},{"line_number":479,"context_line":""},{"line_number":480,"context_line":"        body \u003d \u0027SUCCESS\u0027"},{"line_number":481,"context_line":"        self.stub_url(\u0027GET\u0027, [\u0027path\u0027], text\u003dbody)"},{"line_number":482,"context_line":""},{"line_number":483,"context_line":"        a \u003d self.create_auth_plugin()"},{"line_number":484,"context_line":"        s \u003d session.Session(auth\u003da)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_72c81521","line":481,"range":{"start_line":480,"start_character":8,"end_line":481,"end_character":49},"in_reply_to":"5f201791_5e32c55f","updated":"2017-06-26 19:50:29.000000000","message":"Done","commit_id":"e89e354335d12bae8575cb2dd4d98aca3928d844"}]}
