)]}'
{"keystoneauth1/discover.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"61eca9b36fab783e0e5433d0d542f438d8a9c567","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    def data_for(self, version, url\u003dNone, **kwargs):"},{"line_number":263,"context_line":"        \"\"\"Return endpoint data for a version."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        :param tuple version: The version is always a minimum version in the"},{"line_number":266,"context_line":"            same major release as there should be no compatibility issues with"},{"line_number":267,"context_line":"            using a version newer than the one asked for."},{"line_number":268,"context_line":"        :param string url: If url is given, the data will be returned for the"},{"line_number":269,"context_line":"            endpoint data that that has a self link matching the url."},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_0d2a027e","line":267,"range":{"start_line":265,"start_character":0,"end_line":267,"end_character":57},"updated":"2017-06-14 16:53:24.000000000","message":"Update docstring if version is in-fact possible to be \"\" or None, or empty now.","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"23eaa3621908866e35c56f0e4e34cb14f847316a","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    def data_for(self, version, url\u003dNone, **kwargs):"},{"line_number":263,"context_line":"        \"\"\"Return endpoint data for a version."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        :param tuple version: The version is always a minimum version in the"},{"line_number":266,"context_line":"            same major release as there should be no compatibility issues with"},{"line_number":267,"context_line":"            using a version newer than the one asked for."},{"line_number":268,"context_line":"        :param string url: If url is given, the data will be returned for the"},{"line_number":269,"context_line":"            endpoint data that that has a self link matching the url."},{"line_number":270,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_f9eaef0c","line":267,"range":{"start_line":265,"start_character":0,"end_line":267,"end_character":57},"in_reply_to":"7f231b9d_0d2a027e","updated":"2017-06-24 15:13:03.000000000","message":"Done","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"25ad32328f8ca22e5c1aff0c301c5c4dbd94dcd2","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            same major release as there should be no compatibility issues with"},{"line_number":267,"context_line":"            using a version newer than the one asked for."},{"line_number":268,"context_line":"        :param string url: If url is given, the data will be returned for the"},{"line_number":269,"context_line":"            endpoint data that that has a self link matching the url."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        :returns: the endpoint data for a URL that matches the required version"},{"line_number":272,"context_line":"                  (the format is described in version_data) or None if no"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_69f17bcd","line":269,"range":{"start_line":269,"start_character":26,"end_line":269,"end_character":35},"updated":"2017-06-23 18:01:37.000000000","message":"that that","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"23eaa3621908866e35c56f0e4e34cb14f847316a","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            same major release as there should be no compatibility issues with"},{"line_number":267,"context_line":"            using a version newer than the one asked for."},{"line_number":268,"context_line":"        :param string url: If url is given, the data will be returned for the"},{"line_number":269,"context_line":"            endpoint data that that has a self link matching the url."},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        :returns: the endpoint data for a URL that matches the required version"},{"line_number":272,"context_line":"                  (the format is described in version_data) or None if no"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_d9ef331c","line":269,"range":{"start_line":269,"start_character":26,"end_line":269,"end_character":35},"in_reply_to":"5f201791_69f17bcd","updated":"2017-06-24 15:13:03.000000000","message":"Done","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"61eca9b36fab783e0e5433d0d542f438d8a9c567","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                  match."},{"line_number":274,"context_line":"        :rtype: dict"},{"line_number":275,"context_line":"        \"\"\""},{"line_number":276,"context_line":"        if version:"},{"line_number":277,"context_line":"            version \u003d normalize_version_number(version)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        for data in self.version_data(reverse\u003dTrue, **kwargs):"},{"line_number":280,"context_line":"            if url and data[\u0027url\u0027] \u003d\u003d url:"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_1b023f0c","line":277,"range":{"start_line":276,"start_character":0,"end_line":277,"end_character":55},"updated":"2017-06-14 16:53:24.000000000","message":"Is version really ever expected to be None/Empty?\n\nThis seems like a change in behavior.","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"23eaa3621908866e35c56f0e4e34cb14f847316a","unresolved":false,"context_lines":[{"line_number":273,"context_line":"                  match."},{"line_number":274,"context_line":"        :rtype: dict"},{"line_number":275,"context_line":"        \"\"\""},{"line_number":276,"context_line":"        if version:"},{"line_number":277,"context_line":"            version \u003d normalize_version_number(version)"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        for data in self.version_data(reverse\u003dTrue, **kwargs):"},{"line_number":280,"context_line":"            if url and data[\u0027url\u0027] \u003d\u003d url:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_d98a9368","line":277,"range":{"start_line":276,"start_character":0,"end_line":277,"end_character":55},"in_reply_to":"7f231b9d_1b023f0c","updated":"2017-06-24 15:13:03.000000000","message":"Yes - it is - because we\u0027re adding the ability for the user to say \"I want to use whatever is at this url, but please report to me what version it is\" This is also helpful in the following patch for \"please give me the latest version\"","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"25ad32328f8ca22e5c1aff0c301c5c4dbd94dcd2","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        return None"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def url_for(self, version, url\u003dNone, **kwargs):"},{"line_number":288,"context_line":"        \"\"\"Get the endpoint url for a version."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        :param tuple version: The version is always a minimum version in the"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_64c0827c","line":287,"updated":"2017-06-23 18:01:37.000000000","message":"I don\u0027t understand why this needed to be changed. It seems illogical to want to call url_for and then give it a url.","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"23eaa3621908866e35c56f0e4e34cb14f847316a","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        return None"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def url_for(self, version, url\u003dNone, **kwargs):"},{"line_number":288,"context_line":"        \"\"\"Get the endpoint url for a version."},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        :param tuple version: The version is always a minimum version in the"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_39e4e73b","line":287,"in_reply_to":"5f201791_64c0827c","updated":"2017-06-24 15:13:03.000000000","message":"Agree","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"25ad32328f8ca22e5c1aff0c301c5c4dbd94dcd2","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        :param tuple version: The version is always a minimum version in the"},{"line_number":291,"context_line":"            same major release as there should be no compatibility issues with"},{"line_number":292,"context_line":"            using a version newer than the one asked for."},{"line_number":293,"context_line":"        :param string url: If url is given, the data will be returned for the"},{"line_number":294,"context_line":"            endpoint data that that has a self link matching the url."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        :returns: The url for the specified version or None if no match."}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_a44b3a29","line":293,"range":{"start_line":293,"start_character":48,"end_line":293,"end_character":52},"updated":"2017-06-23 18:01:37.000000000","message":"url, not data","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"926d3b9fc0525740f4e85d03365f30e67ddd4b65","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def discover_versions(self, session, version, project_id\u003dNone,"},{"line_number":351,"context_line":"                          authenticated\u003dFalse, allow\u003dNone, endpoint_cache\u003dNone,"},{"line_number":352,"context_line":"                          discover_versions\u003dFalse, allow_version_hack\u003dTrue):"},{"line_number":353,"context_line":"        \"\"\"Run version discovery for the service described."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        Performs Version Discovery and updates the EndpointData object with"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f231b9d_0d39e2a2","line":352,"range":{"start_line":352,"start_character":26,"end_line":352,"end_character":49},"updated":"2017-06-14 16:59:30.000000000","message":"Fix the name here instead at the end of the patch chain. -2 on the last patch because this is mucking with public interfaces.\n\nAlso this is not using positional, new arguments need to be at the end of the method defintion.","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"23eaa3621908866e35c56f0e4e34cb14f847316a","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def discover_versions(self, session, version, project_id\u003dNone,"},{"line_number":351,"context_line":"                          authenticated\u003dFalse, allow\u003dNone, endpoint_cache\u003dNone,"},{"line_number":352,"context_line":"                          discover_versions\u003dFalse, allow_version_hack\u003dTrue):"},{"line_number":353,"context_line":"        \"\"\"Run version discovery for the service described."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        Performs Version Discovery and updates the EndpointData object with"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_d9d8537c","line":352,"range":{"start_line":352,"start_character":26,"end_line":352,"end_character":49},"in_reply_to":"5f201791_042c2e97","updated":"2017-06-24 15:13:03.000000000","message":"Hopefully the rename addresses these both","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"25ad32328f8ca22e5c1aff0c301c5c4dbd94dcd2","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    def discover_versions(self, session, version, project_id\u003dNone,"},{"line_number":351,"context_line":"                          authenticated\u003dFalse, allow\u003dNone, endpoint_cache\u003dNone,"},{"line_number":352,"context_line":"                          discover_versions\u003dFalse, allow_version_hack\u003dTrue):"},{"line_number":353,"context_line":"        \"\"\"Run version discovery for the service described."},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        Performs Version Discovery and updates the EndpointData object with"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f201791_042c2e97","line":352,"range":{"start_line":352,"start_character":26,"end_line":352,"end_character":49},"in_reply_to":"7f231b9d_0d39e2a2","updated":"2017-06-23 18:01:37.000000000","message":"Even if this is renamed, the rationale is really unintuitive to me. The method called discover_versions doesn\u0027t get fetch versions by default? Is there a way we could make this more intuitive? Maybe rename it to fetch_microversion_info or split the functionality into a wrapper function?","commit_id":"6e1ff5fb42c9fab4f9b7810ff6eba42827dd7909"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"48e4891cc22e2b8cb1af877f4220492a78843146","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                return data"},{"line_number":307,"context_line":"            if version and version_match(version, data[\u0027version\u0027]):"},{"line_number":308,"context_line":"                return data"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        return None"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def url_for(self, version, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_520cf9a3","line":309,"updated":"2017-06-26 20:06:40.000000000","message":"I get different answers depending on whether there is a trailing / :\n\n data \u003d disc.data_for(url\u003d\u0027http://192.168.122.45:8776/v3/\u0027)\n \u003d\u003e {\u0027min_microversion\u0027: (3, 0), \u0027url\u0027: u\u0027http://192.168.122.45:8776/v3/\u0027, \u0027max_microversion\u0027: (3, 40), \u0027collection\u0027: None, \u0027version\u0027: (3, 0), \u0027raw_status\u0027: u\u0027CURRENT\u0027}\n data \u003d disc.data_for(url\u003d\u0027http://192.168.122.45:8776/v3\u0027)\n \u003d\u003e None","commit_id":"0f170273b3f4df795a6dc7e3d97cbdc3238fc03e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"f5d3f81b10030ab9a73ec74ef3fbb9f5813fbe94","unresolved":false,"context_lines":[{"line_number":306,"context_line":"                return data"},{"line_number":307,"context_line":"            if version and version_match(version, data[\u0027version\u0027]):"},{"line_number":308,"context_line":"                return data"},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        return None"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"    def url_for(self, version, **kwargs):"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_840d67e9","line":309,"in_reply_to":"5f201791_520cf9a3","updated":"2017-06-28 12:11:53.000000000","message":"Done","commit_id":"0f170273b3f4df795a6dc7e3d97cbdc3238fc03e"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"a57f971e6120ec6c01eeedb675d7a2e65c090704","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        versions.sort(key\u003dlambda v: v[\u0027version\u0027], reverse\u003dreverse)"},{"line_number":284,"context_line":"        return versions"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def data_for(self, version\u003dNone, url\u003dNone, **kwargs):"},{"line_number":287,"context_line":"        \"\"\"Return endpoint data for the service at a url."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        :param tuple version: The version is the minimum version in the"},{"line_number":290,"context_line":"            same major release as there should be no compatibility issues with"},{"line_number":291,"context_line":"            using a version newer than the one asked for. If version is not"},{"line_number":292,"context_line":"            given, the highest available version will be matched."},{"line_number":293,"context_line":"        :param string url: If url is given, the data will be returned for the"},{"line_number":294,"context_line":"            endpoint data that has a self link matching the url."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        :returns: the endpoint data for a URL that matches the required version"},{"line_number":297,"context_line":"                  (the format is described in version_data) or None if no"},{"line_number":298,"context_line":"                  match."},{"line_number":299,"context_line":"        :rtype: dict"},{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        if version:"},{"line_number":302,"context_line":"            version \u003d normalize_version_number(version)"},{"line_number":303,"context_line":"        if url:"},{"line_number":304,"context_line":"            url \u003d url.rstrip(\u0027/\u0027) + \u0027/\u0027"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        for data in self.version_data(reverse\u003dTrue, **kwargs):"},{"line_number":307,"context_line":"            if url and data[\u0027url\u0027] and data[\u0027url\u0027].rstrip(\u0027/\u0027) + \u0027/\u0027 \u003d\u003d url:"},{"line_number":308,"context_line":"                return data"},{"line_number":309,"context_line":"            if version and version_match(version, data[\u0027version\u0027]):"},{"line_number":310,"context_line":"                return data"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        return None"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_de38c2d3","line":310,"range":{"start_line":286,"start_character":3,"end_line":310,"end_character":27},"updated":"2017-06-28 17:53:14.000000000","message":"This changes behavior on this method (which has been released). Previously version\u003dNone would raise a typeerror. Now if url\u003dNone and version\u003dNone, a \"None\" is returned. \n\nUnfortunately this breaks the KSA contract.\n\nYou need to somehow check if version has been passed (even if it is None) [Difficult with a default] or you need to handle the case of version\u003dNone and url\u003dNone (ensuring the result is a TypeError).\n\nMy comment is predicated on what I\u0027m reading, I admit i might be missing something.","commit_id":"0d2d4c89d5de6df57dc2b76ecdce27f4eeb90de8"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"6d24c1965ed5652d54f22ba3ed66a6256aeaa576","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        versions.sort(key\u003dlambda v: v[\u0027version\u0027], reverse\u003dreverse)"},{"line_number":284,"context_line":"        return versions"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def data_for(self, version\u003dNone, url\u003dNone, **kwargs):"},{"line_number":287,"context_line":"        \"\"\"Return endpoint data for the service at a url."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        :param tuple version: The version is the minimum version in the"},{"line_number":290,"context_line":"            same major release as there should be no compatibility issues with"},{"line_number":291,"context_line":"            using a version newer than the one asked for. If version is not"},{"line_number":292,"context_line":"            given, the highest available version will be matched."},{"line_number":293,"context_line":"        :param string url: If url is given, the data will be returned for the"},{"line_number":294,"context_line":"            endpoint data that has a self link matching the url."},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"        :returns: the endpoint data for a URL that matches the required version"},{"line_number":297,"context_line":"                  (the format is described in version_data) or None if no"},{"line_number":298,"context_line":"                  match."},{"line_number":299,"context_line":"        :rtype: dict"},{"line_number":300,"context_line":"        \"\"\""},{"line_number":301,"context_line":"        if version:"},{"line_number":302,"context_line":"            version \u003d normalize_version_number(version)"},{"line_number":303,"context_line":"        if url:"},{"line_number":304,"context_line":"            url \u003d url.rstrip(\u0027/\u0027) + \u0027/\u0027"},{"line_number":305,"context_line":""},{"line_number":306,"context_line":"        for data in self.version_data(reverse\u003dTrue, **kwargs):"},{"line_number":307,"context_line":"            if url and data[\u0027url\u0027] and data[\u0027url\u0027].rstrip(\u0027/\u0027) + \u0027/\u0027 \u003d\u003d url:"},{"line_number":308,"context_line":"                return data"},{"line_number":309,"context_line":"            if version and version_match(version, data[\u0027version\u0027]):"},{"line_number":310,"context_line":"                return data"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        return None"},{"line_number":313,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_859f85b3","line":310,"range":{"start_line":286,"start_character":3,"end_line":310,"end_character":27},"in_reply_to":"5f201791_de38c2d3","updated":"2017-06-29 12:18:35.000000000","message":"Nod. You\u0027re totally right, we can\u0027t break this. Sad I missed it.\n\nThe *semantics* of version\u003dNone broadly in ksa should be the same- if you don\u0027t request a version in things like endpoint_filters, ksa isn\u0027t going to do anything. But on the discovery object, since the point up until now of its existence was to find versioned endpoints, having this throw an error if you didn\u0027t provide a version makes total sense.\n\nI\u0027m going to fix this by just adding new methods. Reworking the semantics of the existing methods is too dangerous.","commit_id":"0d2d4c89d5de6df57dc2b76ecdce27f4eeb90de8"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"ba5e925e534e0ba7a364a76705cec137e1396055","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    def data_for(self, version, **kwargs):"},{"line_number":287,"context_line":"        \"\"\"Return endpoint data for a version."},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        NOTE: This method raises a TypeError if version is None. It is"},{"line_number":290,"context_line":"              kept for backwards compatability. New code should use"},{"line_number":291,"context_line":"              versioned_data_for instead."},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        :param tuple version: The version is always a minimum version in the"},{"line_number":294,"context_line":"            same major release as there should be no compatibility issues with"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_00bfdcfb","line":291,"range":{"start_line":289,"start_character":8,"end_line":291,"end_character":41},"updated":"2017-06-29 16:22:55.000000000","message":"Good way to address this.","commit_id":"cdc10d87410716de46e2a6fcdcb4eb391c3eb751"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"07ea8e8a66fa91f0a7bdb1b2bf0c54d45e06b5a0","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            url \u003d url.rstrip(\u0027/\u0027) + \u0027/\u0027"},{"line_number":346,"context_line":""},{"line_number":347,"context_line":"        for data in self.version_data(reverse\u003dTrue, **kwargs):"},{"line_number":348,"context_line":"            if url and data[\u0027url\u0027] and data[\u0027url\u0027].rstrip(\u0027/\u0027) + \u0027/\u0027 \u003d\u003d url:"},{"line_number":349,"context_line":"                return data"},{"line_number":350,"context_line":"            if version and version_match(version, data[\u0027version\u0027]):"},{"line_number":351,"context_line":"                return data"}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_11b82d74","line":348,"range":{"start_line":348,"start_character":39,"end_line":348,"end_character":68},"updated":"2017-06-30 14:15:04.000000000","message":"does this need to remove the / and then add it back again?\nif so, it\u0027d be good to add a note here so people don\u0027t remove it in an attempt to \"refactor\"","commit_id":"cdc10d87410716de46e2a6fcdcb4eb391c3eb751"}],"keystoneauth1/identity/base.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"48e4891cc22e2b8cb1af877f4220492a78843146","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        except (exceptions.DiscoveryFailure,"},{"line_number":252,"context_line":"                exceptions.HttpError,"},{"line_number":253,"context_line":"                exceptions.ConnectionError):"},{"line_number":254,"context_line":"            return None"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def get_endpoint(self, session, service_type\u003dNone, interface\u003dNone,"},{"line_number":257,"context_line":"                     region_name\u003dNone, service_name\u003dNone, version\u003dNone,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_9544bb48","line":254,"updated":"2017-06-26 20:06:40.000000000","message":"Is returning None the right thing to do here? I\u0027m finding that with discover_versions\u003dFalse and service_type\u003d\u0027volume\u0027 I get data, and with discover_versions\u003dTrue I get None because a DiscoveryFailure was raised during get_versioned_data. Should it not just fall back to the endpoint_data that was successfully found earlier?","commit_id":"0f170273b3f4df795a6dc7e3d97cbdc3238fc03e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"f5d3f81b10030ab9a73ec74ef3fbb9f5813fbe94","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        except (exceptions.DiscoveryFailure,"},{"line_number":252,"context_line":"                exceptions.HttpError,"},{"line_number":253,"context_line":"                exceptions.ConnectionError):"},{"line_number":254,"context_line":"            return None"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"    def get_endpoint(self, session, service_type\u003dNone, interface\u003dNone,"},{"line_number":257,"context_line":"                     region_name\u003dNone, service_name\u003dNone, version\u003dNone,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_24f693d8","line":254,"in_reply_to":"5f201791_9544bb48","updated":"2017-06-28 12:11:53.000000000","message":"Yes - that\u0027s an excellent point!","commit_id":"0f170273b3f4df795a6dc7e3d97cbdc3238fc03e"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"07ea8e8a66fa91f0a7bdb1b2bf0c54d45e06b5a0","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    def get_endpoint_data(self, session, service_type\u003dNone, interface\u003dNone,"},{"line_number":160,"context_line":"                          region_name\u003dNone, service_name\u003dNone, version\u003dNone,"},{"line_number":161,"context_line":"                          allow\u003d{}, allow_version_hack\u003dTrue,"},{"line_number":162,"context_line":"                          discover_versions\u003dFalse, skip_discovery\u003dFalse,"},{"line_number":163,"context_line":"                          **kwargs):"},{"line_number":164,"context_line":"        \"\"\"Return a valid endpoint data for a service."},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_91079d1d","line":162,"range":{"start_line":162,"start_character":26,"end_line":162,"end_character":71},"updated":"2017-06-30 14:15:04.000000000","message":"what if both are provided as true? we should at least document what happens","commit_id":"cdc10d87410716de46e2a6fcdcb4eb391c3eb751"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"dcb315d38b1c990b52e697e6d289005f232a615d","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    def get_endpoint_data(self, session, service_type\u003dNone, interface\u003dNone,"},{"line_number":160,"context_line":"                          region_name\u003dNone, service_name\u003dNone, version\u003dNone,"},{"line_number":161,"context_line":"                          allow\u003d{}, allow_version_hack\u003dTrue,"},{"line_number":162,"context_line":"                          discover_versions\u003dFalse, skip_discovery\u003dFalse,"},{"line_number":163,"context_line":"                          **kwargs):"},{"line_number":164,"context_line":"        \"\"\"Return a valid endpoint data for a service."},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_2ea2914c","line":162,"range":{"start_line":162,"start_character":26,"end_line":162,"end_character":71},"in_reply_to":"3f1d235d_3faf6be4","updated":"2017-07-02 14:20:14.000000000","message":"+1 for documenting that skip_discovery supercedes discover_versions but I don\u0027t think raising an error is necessary. They aren\u0027t exactly inverses of each other - if they were there would only be one parameter. Since discover_versions changes its default to True in a later patch it would be unfriendly to require setting both discover_versions and skip_discovery to False if the user wanted to provide a version and also skip discovery.","commit_id":"cdc10d87410716de46e2a6fcdcb4eb391c3eb751"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"d6eca91f5964c57ec3479962fce5e7e78444552b","unresolved":false,"context_lines":[{"line_number":159,"context_line":"    def get_endpoint_data(self, session, service_type\u003dNone, interface\u003dNone,"},{"line_number":160,"context_line":"                          region_name\u003dNone, service_name\u003dNone, version\u003dNone,"},{"line_number":161,"context_line":"                          allow\u003d{}, allow_version_hack\u003dTrue,"},{"line_number":162,"context_line":"                          discover_versions\u003dFalse, skip_discovery\u003dFalse,"},{"line_number":163,"context_line":"                          **kwargs):"},{"line_number":164,"context_line":"        \"\"\"Return a valid endpoint data for a service."},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3f1d235d_3faf6be4","line":162,"range":{"start_line":162,"start_character":26,"end_line":162,"end_character":71},"in_reply_to":"3f1d235d_91079d1d","updated":"2017-06-30 19:07:16.000000000","message":"we should probably do as in https://review.openstack.org/#/c/469090 and raise TypeError/ValueError","commit_id":"cdc10d87410716de46e2a6fcdcb4eb391c3eb751"}],"keystoneauth1/tests/unit/test_discovery.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"a57f971e6120ec6c01eeedb675d7a2e65c090704","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        self.assertTrue(mock.called_once)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def test_data_for_url(self):"},{"line_number":363,"context_line":"        mock \u003d self.requests_mock.get(V3_URL,"},{"line_number":364,"context_line":"                                      status_code\u003d200,"},{"line_number":365,"context_line":"                                      json\u003dV3_VERSION_ENTRY)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        disc \u003d discover.Discover(self.session, V3_URL)"},{"line_number":368,"context_line":"        for url in (V3_URL, V3_URL + \u0027/\u0027):"},{"line_number":369,"context_line":"            data \u003d disc.data_for(url\u003durl)"},{"line_number":370,"context_line":"            self.assertEqual(data[\u0027version\u0027], (3, 0))"},{"line_number":371,"context_line":"            self.assertEqual(data[\u0027raw_status\u0027], \u0027stable\u0027)"},{"line_number":372,"context_line":"            self.assertEqual(data[\u0027url\u0027], V3_URL)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        self.assertTrue(mock.called_once)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def test_keystone_version_data(self):"},{"line_number":377,"context_line":"        mock \u003d self.requests_mock.get(BASE_URL,"}],"source_content_type":"text/x-python","patch_set":11,"id":"5f201791_5e527214","line":374,"range":{"start_line":362,"start_character":0,"end_line":374,"end_character":41},"updated":"2017-06-28 17:53:14.000000000","message":"We didn\u0027t test before, but we are still not testing bad data being passed into data_for.","commit_id":"0d2d4c89d5de6df57dc2b76ecdce27f4eeb90de8"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"6d24c1965ed5652d54f22ba3ed66a6256aeaa576","unresolved":false,"context_lines":[{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        self.assertTrue(mock.called_once)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"    def test_data_for_url(self):"},{"line_number":363,"context_line":"        mock \u003d self.requests_mock.get(V3_URL,"},{"line_number":364,"context_line":"                                      status_code\u003d200,"},{"line_number":365,"context_line":"                                      json\u003dV3_VERSION_ENTRY)"},{"line_number":366,"context_line":""},{"line_number":367,"context_line":"        disc \u003d discover.Discover(self.session, V3_URL)"},{"line_number":368,"context_line":"        for url in (V3_URL, V3_URL + \u0027/\u0027):"},{"line_number":369,"context_line":"            data \u003d disc.data_for(url\u003durl)"},{"line_number":370,"context_line":"            self.assertEqual(data[\u0027version\u0027], (3, 0))"},{"line_number":371,"context_line":"            self.assertEqual(data[\u0027raw_status\u0027], \u0027stable\u0027)"},{"line_number":372,"context_line":"            self.assertEqual(data[\u0027url\u0027], V3_URL)"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        self.assertTrue(mock.called_once)"},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"    def test_keystone_version_data(self):"},{"line_number":377,"context_line":"        mock \u003d self.requests_mock.get(BASE_URL,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f1d235d_2540b135","line":374,"range":{"start_line":362,"start_character":0,"end_line":374,"end_character":41},"in_reply_to":"5f201791_5e527214","updated":"2017-06-29 12:18:35.000000000","message":"Test added in next patch.","commit_id":"0d2d4c89d5de6df57dc2b76ecdce27f4eeb90de8"}]}
