)]}'
{"keystoneclient/service_catalog.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"8eb73f81c3a04b4811471636e1858aff0b5d7618","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        if not self.get_data():"},{"line_number":206,"context_line":"            raise exceptions.EmptyCatalog(\u0027The service catalog is empty.\u0027)"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        if endpoint_type and \u0027URL\u0027 not in endpoint_type:"},{"line_number":209,"context_line":"            endpoint_type \u003d endpoint_type + \u0027URL\u0027"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"        sc_endpoints \u003d self.get_endpoints(service_type\u003dservice_type,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATn%2F%2FWdI%3D","line":208,"updated":"2013-11-11 21:54:06.000000000","message":"compat between v2 and v3...make its own function (self document)","commit_id":"be7593c574350139113ee8f97bceae77186c4af0"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"aa23441349bcbe41a2d5803f9843ac5dd5cab2ae","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        for service in (self.get_data() or []):"},{"line_number":83,"context_line":"            try:"},{"line_number":84,"context_line":"                st \u003d service[\u0027type\u0027]"},{"line_number":85,"context_line":"            except KeyError:"},{"line_number":86,"context_line":"                continue"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            if service_type and service_type !\u003d st:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bt9E%3D","line":85,"updated":"2013-11-21 05:54:43.000000000","message":"We may want to log this as warning so client know that we have an invalid service catalog entry.","commit_id":"b3d2721a0b492378e0c929f5a5246451fa0eb8d3"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0b09caa2c7c8b4713e3df108b9a12c8af303387f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        for service in (self.get_data() or []):"},{"line_number":83,"context_line":"            try:"},{"line_number":84,"context_line":"                st \u003d service[\u0027type\u0027]"},{"line_number":85,"context_line":"            except KeyError:"},{"line_number":86,"context_line":"                continue"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            if service_type and service_type !\u003d st:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Btzw%3D","line":85,"in_reply_to":"AAAATn%2F%2Bt9E%3D","updated":"2013-11-21 06:25:33.000000000","message":"I\u0027m not sure what sort of license i have to using logging from the client, or what they can do about it if the server is returning an invalid catalog.","commit_id":"b3d2721a0b492378e0c929f5a5246451fa0eb8d3"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"aa23441349bcbe41a2d5803f9843ac5dd5cab2ae","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            except KeyError:"},{"line_number":86,"context_line":"                continue"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            if service_type and service_type !\u003d st:"},{"line_number":89,"context_line":"                continue"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            sc[st] \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bt9A%3D","line":88,"updated":"2013-11-21 05:54:43.000000000","message":"I wonder if this need to be a case-insensitive comparison to be more forgiving.","commit_id":"b3d2721a0b492378e0c929f5a5246451fa0eb8d3"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0b09caa2c7c8b4713e3df108b9a12c8af303387f","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            except KeyError:"},{"line_number":86,"context_line":"                continue"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"            if service_type and service_type !\u003d st:"},{"line_number":89,"context_line":"                continue"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"            sc[st] \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Btz8%3D","line":88,"in_reply_to":"AAAATn%2F%2Bt9A%3D","updated":"2013-11-21 06:25:33.000000000","message":"possibly, but that should definetly be an additional feature rather than a part of this refactor","commit_id":"b3d2721a0b492378e0c929f5a5246451fa0eb8d3"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"aa23441349bcbe41a2d5803f9843ac5dd5cab2ae","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                        self._is_endpoint_type_match(endpoint, endpoint_type)):"},{"line_number":96,"context_line":"                    continue"},{"line_number":97,"context_line":"                if (self.region_name and"},{"line_number":98,"context_line":"                        self.region_name !\u003d endpoint.get(\u0027region\u0027)):"},{"line_number":99,"context_line":"                    continue"},{"line_number":100,"context_line":"                sc[st].append(endpoint)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bt84%3D","line":98,"updated":"2013-11-21 05:54:43.000000000","message":"Should region_name be part of the filter? I always think of region_name as just another attribute in the endpoint. I think we should make the filtering mechanism more generic.","commit_id":"b3d2721a0b492378e0c929f5a5246451fa0eb8d3"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0b09caa2c7c8b4713e3df108b9a12c8af303387f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                        self._is_endpoint_type_match(endpoint, endpoint_type)):"},{"line_number":96,"context_line":"                    continue"},{"line_number":97,"context_line":"                if (self.region_name and"},{"line_number":98,"context_line":"                        self.region_name !\u003d endpoint.get(\u0027region\u0027)):"},{"line_number":99,"context_line":"                    continue"},{"line_number":100,"context_line":"                sc[st].append(endpoint)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Btzg%3D","line":98,"in_reply_to":"AAAATn%2F%2Bt84%3D","updated":"2013-11-21 06:25:33.000000000","message":"region_name should not belong on the service catalog. That\u0027s what brought this whole thing up. The follow on patch tries to make region handling more sane.","commit_id":"b3d2721a0b492378e0c929f5a5246451fa0eb8d3"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"aa23441349bcbe41a2d5803f9843ac5dd5cab2ae","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        return sc"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _get_service_endpoints(self, attr, filter_value, service_type,"},{"line_number":105,"context_line":"                               endpoint_type):"},{"line_number":106,"context_line":"        \"\"\"Fetch the endpoints of a particular service_type and handle"},{"line_number":107,"context_line":"        the filtering."},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Bt9k%3D","line":105,"updated":"2013-11-21 05:54:43.000000000","message":"We only allow single attribute filter? Should it be a list of filters?","commit_id":"b3d2721a0b492378e0c929f5a5246451fa0eb8d3"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0b09caa2c7c8b4713e3df108b9a12c8af303387f","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        return sc"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def _get_service_endpoints(self, attr, filter_value, service_type,"},{"line_number":105,"context_line":"                               endpoint_type):"},{"line_number":106,"context_line":"        \"\"\"Fetch the endpoints of a particular service_type and handle"},{"line_number":107,"context_line":"        the filtering."},{"line_number":108,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F%2Btyw%3D","line":105,"in_reply_to":"AAAATn%2F%2Bt9k%3D","updated":"2013-11-21 06:25:33.000000000","message":"I\u0027d be more inclined to say that we shouldn\u0027t allow filtering beyond what we explicity allow with region, endpoint_type, service_type. The service catalog doesn\u0027t have any freeform data in it and matching a filter_value implies that the user knows something about the layout of the catalog - which is likely to break between versions. \n\nI\u0027m guessing that this was here before there was proper service_type etc handling.\n\nIf the user is looking to filter on a specific value they should call get_endpoints and filter it themselves, we return the full dictionary anyway.","commit_id":"b3d2721a0b492378e0c929f5a5246451fa0eb8d3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"30d50c9451326d515f63d024f097844bc0df5842","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        raise NotImplementedError()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def _is_endpoint_type_match(cls, endpoint, endpoint_type):"},{"line_number":52,"context_line":"        \"\"\"Helper function to normalize endpoint matching across v2 and v3."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        :returns: True if the provided endpoint matches the required"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F%2BXQk%3D","line":51,"updated":"2013-11-26 22:11:02.000000000","message":"I am going to go on the record and say that the class methods use here seems very much out of place still.  If this is expected to be overridded, we should use ABCMeta, otherwise, it just seems odd to have a class method that has no reason to reference the cls pointer.\n\nAs discussed in IRC there really is no expectation that this will ever be implementing in another fashion than on the subclasses.\n\nSuggest using abc meta in these cases since it is expected to be implemented by the subclass based upon lines 78 and 95.  Since these need to be implemeted (or NotImplemented is raised) abcmeta will inform us at instantiation time not at \"sometime in the future during runtime we get an error since it wasn\u0027t defined on the subclass\".","commit_id":"ad88f16d7d01f58450095d16d93934e1b8f060cc"}]}
