def apply_mask_cloud(image_coll, collection_name, cloudy_pix_flag):
    """
    Different input_collections need different steps to be taken to handle
    cloudy image. The first step is to reject images that more than X%
    cloudy pixels (here X=5). The next step is to mask cloudy pixels. This
    will hopefully mean that when we take the median of the ImageCollection,
    we ignore cloudy pixels.

    Parameters
    ----------
    image_coll : ee.ImageCollection
        The ImageCollection of images from which we want to remove cloud.
    collection_name : str
        Name of the collection so that we can apply collection specific
        masking.
    cloud_pix_flag : str
        Name of the flag which details the fraction of cloudy pixels in each
        image.

    Returns
    ----------
    image_coll
        Image collection with very cloudy images removed, and masked images
        containing a tolerable amount of cloud.
    """

    # construct cloud mask if availible
    if collection_name == 'COPERNICUS/S2':
        mask_func = cloud_mask.sentinel2()
    elif collection_name == 'LANDSAT/LC08/C01/T1_SR':
        mask_func = cloud_mask.landsat8SRPixelQA()
    elif (collection_name == 'LANDSAT/LE07/C01/T1_SR'
          or collection_name == 'LANDSAT/LT05/C01/T1_SR'
          or collection_name == 'LANDSAT/LT04/C01/T1_SR'):
        mask_func = cloud_mask.landsat457SRPixelQA()
    else:
        print("No cloud mask logic defined for input collection {}"\
              .format(collection_name))
        return image_coll

    # images with more than this percent of cloud pixels are removed
    cloud_pix_frac = 50

    # remove images that have more than `cloud_pix_frac`% cloudy pixels
    if cloudy_pix_flag != 'None':
        image_coll = image_coll.filter(
            ee.Filter.lt(cloudy_pix_flag, cloud_pix_frac))

    # apply per pixel cloud mask
    image_coll = image_coll.map(mask_func)

    return image_coll
def test_snow():
    masked = cloud_mask.landsat457SRPixelQA(['snow'])(image)
    vals = getValue(masked, p_snow, 30)

    assert vals.get("B1").getInfo() == None