import six


def get_first(predicate, source):
    """Searches for an item that matches the conditions.

    :param predicate: Defines the conditions of the item to search for
    :param source: Iterable collection of items
    :return: The first item that matches the conditions defined by the
             specified predicate, if found; otherwise StopIteration is raised
    """

    return six.next(item for item in source if predicate(item))