It's common to have data update on a regular basis, such as every week or every month. Instead of having to re-upload and style the new data, it can be very convenient to simply refresh a layer using a new data source.
A layer must have finished uploading successfully before it can be refreshed
Refreshing a layer with a file
Refreshing a file is a single function call using the felt-python library.
Just like regular file uploads, refreshing a layer with a new file is a two-step process:
1. Request a refresh via the Felt API
Perform a POST request to receive an S3 presigned URL which you can later upload your files to:
import requests# Your API token should look like this:# api_token = "felt_pat_ABCDEFUDQPAGGNBmX40YNhkCRvvLI3f8/BCwD/g8"api_token ="<YOUR_API_TOKEN>"map_id ="<YOUR_MAP_ID>"layer_id ="<YOUR_LAYER_ID>"r = requests.post(f"http://felt.com/api/v2/maps/{map_id}/layers/{layer_id}/refresh", headers={"Authorization": f"Bearer {api_token}"})assert r.okpresigned_upload = r.json()
import osfrom felt_python import refresh_file_layer# Setting your API token as an env variable can save# you from repeating it in every function callos.environ["FELT_API_TOKEN"]="<YOUR_API_TOKEN>"map_id ="<YOUR_MAP_ID>"layer_id ="<YOUR_LAYER_ID>"new_file_name ="<PATH_TO_NEW_FILE>"refresh_file_layer( map_id=map_id, layer_id=layer_id, file_name=new_file_name)
2. Upload your file(s) to Amazon s3
# This code is a continuation of the previous Python code block# and assumes you already have a "presigned_upload" variableurl = presigned_upload["url"]presigned_attributes = presigned_upload["presigned_attributes"]# A 204 response indicates that the upload was successfulwithopen(YOUR_FILE_WITH_EXTENSION, "rb")as file_obj: output = requests.post( url,# Order is important, file should come at the end files={**presigned_attributes, "file": file_obj}, )
# Nothing! Uploading a file is a single step with the felt-python library
Refreshing a layer with a URL
Similar to a URL upload, refreshing an existing URL layer is just a matter of making a single POST request:
# Your API token and map ID should look like this:# FELT_API_TOKEN="felt_pat_ABCDEFUDQPAGGNBmX40YNhkCRvvLI3f8/BCwD/g8"FELT_API_TOKEN="<YOUR_API_TOKEN>"MAP_ID="<YOUR_MAP_ID>"LAYER_ID="<YOUR_LAYER_ID>"curl-L \-XPOST \-H"Content-Type: application/json" \-H"Authorization: Bearer ${FELT_API_TOKEN}" \"https://felt.com/api/v2/maps/${MAP_ID}/layers/${LAYER_ID}/refresh"
import requests# Your API token and map ID should look like this:# api_token = "felt_pat_ABCDEFUDQPAGGNBmX40YNhkCRvvLI3f8/BCwD/g8"api_token ="<YOUR_API_TOKEN>"map_id ="<YOUR_MAP_ID>"layer_id ="<YOUR_LAYER_ID>"r = requests.post(f"http://felt.com/api/v2/maps/{map_id}/layers/{layer_id}/refresh", headers={"Authorization": f"Bearer {api_token}"})assert r.okprint(r.json())
from felt_python import refresh_url_layerrefresh_url_layer(map_id, layer_id)