def parse_sources_file(filepath):
    """
    Parse file on disk

    :returns: List of data sources, [:class:`DataSource`]
    :raises: :exc:`InvalidData` If any error occurs reading
        file, so an I/O error, non-existent file, or invalid format.
    """
    try:
        with open(filepath, 'r') as f:
            return parse_sources_data(f.read(), origin=filepath)
    except __HOLE__ as e:
        raise InvalidData("I/O error reading sources file: %s"%(str(e)), origin=filepath)
dataset/ETHPy150Open ros-infrastructure/rosdep/src/rosdep2/sources_list.py/parse_sources_file