def METHOD_NAME(self, id):
    layer = self.dbsession.query(Layer).get(id)
    if layer is None:
        raise Exception("Layer {} does not exist.".format(id))
    logger.info("Downloading layer {}".format(layer.name()))
    path = self.layer_path(layer)
    dir_path = os.path.dirname(path)
    if not os.path.exists(dir_path):
        os.makedirs(dir_path)
    # If file is obsolete, unlink
    if os.path.isfile(path):
        cache_mtime = datetime.fromtimestamp(os.path.getmtime(path))
        if layer.data_lastupdated_date > cache_mtime:
            logger.debug(
                "  File {} considered as obsolete {} > {}".format(
                    layer.filename(), layer.data_lastupdated_date, cache_mtime
                )
            )
            os.unlink(path)
        else:
            logger.info("  File {} found in cache".format(layer.filename()))
    # If file not in cache, download it
    if not os.path.isfile(path):
        geonode = self.settings["geonode"]
        parsed = urlsplit(geonode["url"])
        url = urlunsplit(
            (parsed.scheme, parsed.netloc, layer.download_url, "", "")
        )
        # FIXME: temporary override
        if layer.hazardset_id == "LS-GLOBAL-arup":
            url = ("https://drive.google.com/uc?export=download"
                   "&id=18ilYOnMikhBZ708uole4jpeghRd4soD7")
        # FIXME: temporary override
        if layer.hazardset_id == "FL-GLOBAL-FATHOM":
            url = urlunsplit(
                (parsed.scheme, parsed.netloc, "/uploaded/layers/adm2_fu_v3_4bit.tif", "", "")
            )
        logger.info("  Retrieving {}".format(url))
        try:
            r = requests.get(url, stream=True)
            r.raise_for_status()
        except Exception as e:
            logger.warning(
                "  Unable to download data for layer {}: {}".format(
                    layer.name(), str(e)
                )
            )
            return
        logger.info("  Saving to {}".format(path))
        try:
            with open(path, "wb") as f:
                for chunk in r.iter_content(chunk_size=1024):
                    f.write(chunk)
        except:
            os.unlink(path)
            logger.error("Failed to save file: {}".format(path), exc_info=True)
            return False
    layer.downloaded = os.path.isfile(path)
    self.dbsession.flush()