)]}'
{"keystoneauth1/access/service_catalog.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f4c876ca0beb4431cd861c5f4e6d33f8a4bc243a","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        return interface"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @abc.abstractmethod"},{"line_number":70,"context_line":"    def extract_interface_endpoint(self, endpoint, interface):"},{"line_number":71,"context_line":"        \"\"\"Return the url for an interface from an endpoint.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @positional()"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_b32213b8","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":34},"updated":"2017-06-05 09:35:42.000000000","message":"The terminology here is a little confusing, we\u0027re sometimes calling it \u0027endpoint\u0027 and sometimes calling it \u0027url\u0027. get_endpoints is returning lists of endpoint dicts and get_urls is returning a list of strings and this method is returning a string even though the method is named _endpoint.\n\nMaybe extract_interface_endpoint_url? Or would that make it worse...","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"a6ab98b728f62daf5206d5345a779e58001c9d3d","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        return interface"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @abc.abstractmethod"},{"line_number":70,"context_line":"    def extract_interface_endpoint(self, endpoint, interface):"},{"line_number":71,"context_line":"        \"\"\"Return the url for an interface from an endpoint.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @positional()"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_46a5ceb4","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":34},"in_reply_to":"df140735_32f9fd4c","updated":"2017-06-07 20:03:51.000000000","message":"Totally agree. Although it\u0027s not entirely possible to be consistent everywhere, my brain has been trying to think of \"Endpoint\" as the object/dict describing an endpoint of a service, and \"url\" as the actual url.\n\nClearly things like endpoint_override exist and we can\u0027t do anything about that. But this is a great point and I shall fix.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b31c270c8e25a0f9e066caf00b438a2c790692c0","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        return interface"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @abc.abstractmethod"},{"line_number":70,"context_line":"    def extract_interface_endpoint(self, endpoint, interface):"},{"line_number":71,"context_line":"        \"\"\"Return the url for an interface from an endpoint.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @positional()"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_32f9fd4c","line":70,"range":{"start_line":70,"start_character":8,"end_line":70,"end_character":34},"in_reply_to":"df140735_b32213b8","updated":"2017-06-07 17:37:31.000000000","message":"I think this works in either case. \"Extract\" being key... but our terminology is wonky and inconsistent. Might be worth going with Colleen\u0027s recommendation.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f4c876ca0beb4431cd861c5f4e6d33f8a4bc243a","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        be skipped.  This allows compatibility with services that existed"},{"line_number":168,"context_line":"        before the name was available in the catalog."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        Returns a dict keyed by service_type with a list of endpoint dicts"},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        endpoints_data \u003d self.get_endpoints_data("},{"line_number":173,"context_line":"            service_type\u003dservice_type, interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_33d96356","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":74},"updated":"2017-06-05 09:35:42.000000000","message":"This is not what it returned before, it returned a list. Doesn\u0027t this make this backwards incompatible?","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b31c270c8e25a0f9e066caf00b438a2c790692c0","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        be skipped.  This allows compatibility with services that existed"},{"line_number":168,"context_line":"        before the name was available in the catalog."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        Returns a dict keyed by service_type with a list of endpoint dicts"},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        endpoints_data \u003d self.get_endpoints_data("},{"line_number":173,"context_line":"            service_type\u003dservice_type, interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_f2c145e6","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":74},"in_reply_to":"df140735_33d96356","updated":"2017-06-07 17:37:31.000000000","message":"Correct, this is backwards incompat, this must return a list.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"6e279853d89431c59c65567aa76ef14dc29ac7cd","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        be skipped.  This allows compatibility with services that existed"},{"line_number":168,"context_line":"        before the name was available in the catalog."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        Returns a dict keyed by service_type with a list of endpoint dicts"},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        endpoints_data \u003d self.get_endpoints_data("},{"line_number":173,"context_line":"            service_type\u003dservice_type, interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf091321_8dcb27a4","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":74},"in_reply_to":"df140735_c690be51","updated":"2017-06-08 06:45:15.000000000","message":"Gotcha, I see it now. This is a huge improvement in readability compared to the old method.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"a6ab98b728f62daf5206d5345a779e58001c9d3d","unresolved":false,"context_lines":[{"line_number":167,"context_line":"        be skipped.  This allows compatibility with services that existed"},{"line_number":168,"context_line":"        before the name was available in the catalog."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        Returns a dict keyed by service_type with a list of endpoint dicts"},{"line_number":171,"context_line":"        \"\"\""},{"line_number":172,"context_line":"        endpoints_data \u003d self.get_endpoints_data("},{"line_number":173,"context_line":"            service_type\u003dservice_type, interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_c690be51","line":170,"range":{"start_line":170,"start_character":8,"end_line":170,"end_character":74},"in_reply_to":"df140735_f2c145e6","updated":"2017-06-07 20:03:51.000000000","message":"the patch may be misleading, but this is actually what it returned before. get_urls is the thing that returns a list.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f4c876ca0beb4431cd861c5f4e6d33f8a4bc243a","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        :param string service_id: The identifier of a service."},{"line_number":199,"context_line":"        :param string endpoint_id: The identifier of an endpoint."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        :returns: a tuple of maching EndpointData objects"},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        endpoints \u003d self.get_endpoints_data(service_type\u003dservice_type,"},{"line_number":204,"context_line":"                                            interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_b3921356","line":201,"range":{"start_line":201,"start_character":20,"end_line":201,"end_character":25},"updated":"2017-06-05 09:35:42.000000000","message":"list","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f4c876ca0beb4431cd861c5f4e6d33f8a4bc243a","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        :param string service_id: The identifier of a service."},{"line_number":199,"context_line":"        :param string endpoint_id: The identifier of an endpoint."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        :returns: a tuple of maching EndpointData objects"},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        endpoints \u003d self.get_endpoints_data(service_type\u003dservice_type,"},{"line_number":204,"context_line":"                                            interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_d397c747","line":201,"range":{"start_line":201,"start_character":29,"end_line":201,"end_character":36},"updated":"2017-06-05 09:35:42.000000000","message":"matching","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"a6ab98b728f62daf5206d5345a779e58001c9d3d","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        :param string service_id: The identifier of a service."},{"line_number":199,"context_line":"        :param string endpoint_id: The identifier of an endpoint."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        :returns: a tuple of maching EndpointData objects"},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        endpoints \u003d self.get_endpoints_data(service_type\u003dservice_type,"},{"line_number":204,"context_line":"                                            interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_a69dca67","line":201,"range":{"start_line":201,"start_character":20,"end_line":201,"end_character":25},"in_reply_to":"df140735_b3921356","updated":"2017-06-07 20:03:51.000000000","message":"Done","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"a6ab98b728f62daf5206d5345a779e58001c9d3d","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        :param string service_id: The identifier of a service."},{"line_number":199,"context_line":"        :param string endpoint_id: The identifier of an endpoint."},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        :returns: a tuple of maching EndpointData objects"},{"line_number":202,"context_line":"        \"\"\""},{"line_number":203,"context_line":"        endpoints \u003d self.get_endpoints_data(service_type\u003dservice_type,"},{"line_number":204,"context_line":"                                            interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_869ac66b","line":201,"range":{"start_line":201,"start_character":29,"end_line":201,"end_character":36},"in_reply_to":"df140735_d397c747","updated":"2017-06-07 20:03:51.000000000","message":"Done","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b31c270c8e25a0f9e066caf00b438a2c790692c0","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        return cls(token[\u0027access\u0027].get(\u0027serviceCatalog\u0027, {}))"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def normalize_interface(self, interface):"},{"line_number":345,"context_line":"        if interface and \u0027URL\u0027 not in interface:"},{"line_number":346,"context_line":"            interface \u003d interface + \u0027URL\u0027"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_925e8943","line":344,"range":{"start_line":344,"start_character":28,"end_line":344,"end_character":33},"updated":"2017-06-07 17:37:31.000000000","message":"Superfluous change, revert.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f4c876ca0beb4431cd861c5f4e6d33f8a4bc243a","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        return cls(token[\u0027access\u0027].get(\u0027serviceCatalog\u0027, {}))"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def normalize_interface(self, interface):"},{"line_number":345,"context_line":"        if interface and \u0027URL\u0027 not in interface:"},{"line_number":346,"context_line":"            interface \u003d interface + \u0027URL\u0027"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_f3852b08","line":344,"updated":"2017-06-05 09:35:42.000000000","message":"why?","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"a6ab98b728f62daf5206d5345a779e58001c9d3d","unresolved":false,"context_lines":[{"line_number":341,"context_line":""},{"line_number":342,"context_line":"        return cls(token[\u0027access\u0027].get(\u0027serviceCatalog\u0027, {}))"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def normalize_interface(self, interface):"},{"line_number":345,"context_line":"        if interface and \u0027URL\u0027 not in interface:"},{"line_number":346,"context_line":"            interface \u003d interface + \u0027URL\u0027"},{"line_number":347,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_468eee2e","line":344,"range":{"start_line":344,"start_character":28,"end_line":344,"end_character":33},"in_reply_to":"df140735_925e8943","updated":"2017-06-07 20:03:51.000000000","message":"Oh, whoops. sorry- that was left over from a different approach that didn\u0027t work out.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f583cfa3695f47b5b1fdeeabd0bfa6f0e328bd04","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @abc.abstractmethod"},{"line_number":70,"context_line":"    def extract_interface_endpoint(self, endpoint, interface):"},{"line_number":71,"context_line":"        \"\"\"Return the url for an interface from an endpoint description.\"\"\""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @positional()"},{"line_number":74,"context_line":"    def get_endpoints_data(self, service_type\u003dNone, interface\u003dNone,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf091321_51d90f81","line":71,"updated":"2017-06-08 18:49:36.000000000","message":"Would probably be good to document these parameters","commit_id":"696d80af85152fa8bbcc966368ca1d824e30bec7"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"af6d92a8865aa58d13825bc9ae1bb419d9346309","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @staticmethod"},{"line_number":57,"context_line":"    def normalize_interface(interface):"},{"line_number":58,"context_line":"        \"\"\"Handle differences in the way v2 and v3 catalogs specify endpoint."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        Both v2 and v3 must be able to handle the endpoint style of the other."}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_d464edbb","line":57,"updated":"2017-06-08 19:25:47.000000000","message":"I think you need to put the self back for this patch","commit_id":"42df75685f03319d0ff2e9adbbf055fe76a6e781"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"dbe6d8d06f6391f2a0c6e54519d32492d733a5cb","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @staticmethod"},{"line_number":57,"context_line":"    def normalize_interface(interface):"},{"line_number":58,"context_line":"        \"\"\"Handle differences in the way v2 and v3 catalogs specify endpoint."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        Both v2 and v3 must be able to handle the endpoint style of the other."}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_94a31550","line":57,"in_reply_to":"bf091321_74552150","updated":"2017-06-08 19:44:22.000000000","message":"We can totally put it back - but it\u0027s overridden in both of the concrete classes. It really should just be marked abstract - there is literally no code anywhere that can call this method.","commit_id":"42df75685f03319d0ff2e9adbbf055fe76a6e781"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"34e107ea828ed1b1e39019da44e90c5d0d9517f4","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @staticmethod"},{"line_number":57,"context_line":"    def normalize_interface(interface):"},{"line_number":58,"context_line":"        \"\"\"Handle differences in the way v2 and v3 catalogs specify endpoint."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        Both v2 and v3 must be able to handle the endpoint style of the other."}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_29462f7e","line":57,"in_reply_to":"bf091321_94a31550","updated":"2017-06-08 23:01:13.000000000","message":"We can do this fix in a followup. But it should be explicitly reverted, unfortunately, this *is* a public contract in KSA.","commit_id":"42df75685f03319d0ff2e9adbbf055fe76a6e781"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"395793017129620ae33b7c9bf773225d4904e157","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        \"\"\""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @staticmethod"},{"line_number":57,"context_line":"    def normalize_interface(interface):"},{"line_number":58,"context_line":"        \"\"\"Handle differences in the way v2 and v3 catalogs specify endpoint."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        Both v2 and v3 must be able to handle the endpoint style of the other."}],"source_content_type":"text/x-python","patch_set":3,"id":"bf091321_74552150","line":57,"in_reply_to":"bf091321_d464edbb","updated":"2017-06-08 19:42:13.000000000","message":"++\n\nNow, that being said, with @staticmethod, this is probably totally broken as is (previous patch). Since anyone who uses it needs to specify the self *and* interface... but we can\u0027t break people","commit_id":"42df75685f03319d0ff2e9adbbf055fe76a6e781"}],"keystoneauth1/discover.py":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"f4c876ca0beb4431cd861c5f4e6d33f8a4bc243a","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return versions"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def data_for(self, version, **kwargs):"},{"line_number":242,"context_line":"        \"\"\"Return endpoint data for a version."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        :param tuple version: The version is always a minimum version in the"},{"line_number":245,"context_line":"            same major release as there should be no compatibility issues with"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_b3ac53ed","line":242,"range":{"start_line":242,"start_character":18,"end_line":242,"end_character":31},"updated":"2017-06-05 09:35:42.000000000","message":"It\u0027s a little confusing to me that this method will still exist but not have anything to do with the new EndpointData class :/","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"a6ab98b728f62daf5206d5345a779e58001c9d3d","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return versions"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def data_for(self, version, **kwargs):"},{"line_number":242,"context_line":"        \"\"\"Return endpoint data for a version."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        :param tuple version: The version is always a minimum version in the"},{"line_number":245,"context_line":"            same major release as there should be no compatibility issues with"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_e6a18297","line":242,"range":{"start_line":242,"start_character":18,"end_line":242,"end_character":31},"in_reply_to":"df140735_0d9a58c4","updated":"2017-06-07 20:03:51.000000000","message":"Yah. Only exists for backward compat. data_for returns a  normalized version of *some* of the data in discovery.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b31c270c8e25a0f9e066caf00b438a2c790692c0","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return versions"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def data_for(self, version, **kwargs):"},{"line_number":242,"context_line":"        \"\"\"Return endpoint data for a version."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        :param tuple version: The version is always a minimum version in the"},{"line_number":245,"context_line":"            same major release as there should be no compatibility issues with"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_0d9a58c4","line":242,"range":{"start_line":242,"start_character":18,"end_line":242,"end_character":31},"in_reply_to":"df140735_b3ac53ed","updated":"2017-06-07 17:37:31.000000000","message":"@Colleen, this is probably for reverse compat, ksa has a strict \"we will not break you except for severe security issues\" contract. *shrug*. It couldreference the endpoint data but also as long as it keeps working, it\u0027s fine to leave it as is.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"6e279853d89431c59c65567aa76ef14dc29ac7cd","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return versions"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def data_for(self, version, **kwargs):"},{"line_number":242,"context_line":"        \"\"\"Return endpoint data for a version."},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        :param tuple version: The version is always a minimum version in the"},{"line_number":245,"context_line":"            same major release as there should be no compatibility issues with"}],"source_content_type":"text/x-python","patch_set":1,"id":"bf091321_cd2d9f47","line":242,"range":{"start_line":242,"start_character":18,"end_line":242,"end_character":31},"in_reply_to":"df140735_e6a18297","updated":"2017-06-08 06:45:15.000000000","message":"I get that, I definitely don\u0027t think it should be removed, but the docstring makes it a little misleading since we\u0027re overloading the term \"endpoint data\". I don\u0027t think it needs to be changed though.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b31c270c8e25a0f9e066caf00b438a2c790692c0","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        return data[\u0027url\u0027] if data else None"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"class EndpointData(object):"},{"line_number":276,"context_line":"    \"\"\"Normalized information about a discovered endpoint."},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"    Contains url, version, microversion, interface and region information."}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_adf6ccf8","line":275,"range":{"start_line":275,"start_character":0,"end_line":275,"end_character":27},"updated":"2017-06-07 17:37:31.000000000","message":"Nit: This could have been done with a NamedTuple, but this is fine as is. (I prefer named Tuple to eliminate \"holding\" object definitions like this). No need to change.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"}],"keystoneauth1/identity/base.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"b31c270c8e25a0f9e066caf00b438a2c790692c0","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                interface \u003d \u0027public\u0027"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"            service_catalog \u003d self.get_access(session).service_catalog"},{"line_number":218,"context_line":"            # NOTE(mordred): service_catalog.url_data_for raises if it can\u0027t"},{"line_number":219,"context_line":"            # find a match, so this will always be a valid object."},{"line_number":220,"context_line":"            endpoint_data \u003d service_catalog.url_data_for("},{"line_number":221,"context_line":"                service_type\u003dservice_type,"},{"line_number":222,"context_line":"                interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_ad124c08","line":219,"range":{"start_line":218,"start_character":12,"end_line":219,"end_character":66},"updated":"2017-06-07 17:37:31.000000000","message":"Does this mean we\u0027ve changed behavior? Do we raise an exception in some cases now where we didn\u0027t before?\n\nIf so, this is also backwards incompat.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"a6ab98b728f62daf5206d5345a779e58001c9d3d","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                interface \u003d \u0027public\u0027"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"            service_catalog \u003d self.get_access(session).service_catalog"},{"line_number":218,"context_line":"            # NOTE(mordred): service_catalog.url_data_for raises if it can\u0027t"},{"line_number":219,"context_line":"            # find a match, so this will always be a valid object."},{"line_number":220,"context_line":"            endpoint_data \u003d service_catalog.url_data_for("},{"line_number":221,"context_line":"                service_type\u003dservice_type,"},{"line_number":222,"context_line":"                interface\u003dinterface,"}],"source_content_type":"text/x-python","patch_set":1,"id":"df140735_66b7b2da","line":219,"range":{"start_line":218,"start_character":12,"end_line":219,"end_character":66},"in_reply_to":"df140735_ad124c08","updated":"2017-06-07 20:03:51.000000000","message":"The cases in which an exception are raised vs. not should be the same - but this makes me wonder - so maybe let\u0027s protect against it anyway.","commit_id":"acb1e6f8a1a9566c66a3e04423f75b089659ea73"}]}
