Returns ceiling layer from Cloud-List or None if none found

    Assumes that the clouds are already sorted lowest to highest

    Only 'Broken', 'Overcast', and 'Vertical Visibility' are considdered ceilings

    Prevents errors due to lack of cloud information (eg. '' or 'FEW///')

def get_ceiling(clouds: [Cloud]) -> Cloud:  # type: ignore
    """
    Returns ceiling layer from Cloud-List or None if none found

    Assumes that the clouds are already sorted lowest to highest

    Only 'Broken', 'Overcast', and 'Vertical Visibility' are considdered ceilings

    Prevents errors due to lack of cloud information (eg. '' or 'FEW///')
    """
    for cloud in clouds:
        if cloud.altitude and cloud.type in ('OVC', 'BKN', 'VV'):
            return cloud
    return None