Automating QFieldCloud Project Management via the SDK
This document presents some of the common tasks solved by using QFieldCloud SDK. The examples are prepared for both Bash (Linux/macOS) and PowerShell (Windows).
Install QFieldCloud SDK
To interact with the QFieldCloud API, start by installing the official QFieldCloud SDK. The installation command is the same for both Bash and PowerShell:
pip install qfieldcloud-sdk
Once installed, you're ready to manage your projects directly from the command line.
Note: All values are enclosed in quotes, with single quotes (
'
) recommended for Bash (but not mandatory) and double quotes ("
) for PowerShell.
Log in to QFieldCloud
First, log in to your QFieldCloud account.
qfieldcloud-cli login 'ninjamaster' 'secret_password123'
qfieldcloud-cli login "ninjamaster" "secret_password123"
After signing in, the QFieldCloud CLI will output the value of the authentication token.
The authentication token will be sent to QFieldCloud API to authorize you instead of sending the username and password.
You can explicitly pass the authentication token via passing --token
CLI argument for every command.
The easier approach is to set an environment variable with your token:
export QFIELDCLOUD_TOKEN='123abcXYZ987exampleToken'
$env:QFIELDCLOUD_TOKEN = "123abcXYZ987exampleToken"
You may want to extract the session token directly from the JSON output of the qfieldcloud-cli
login command.
This is especially useful if you're automating tasks or chaining multiple commands.
In this example, we'll use the jq
tool to parse the JSON response and retrieve the session token.
qfieldcloud-cli --json login 'ninjamaster' 'secret_password123' | jq .session_token
qfieldcloud-cli --json login "ninjamaster" "secret_password123" | jq ".session_token"
This command will output only the session token, which can be stored in an environment variable for future use:
export QFIELDCLOUD_TOKEN=$(qfieldcloud-cli --json login 'ninjamaster' 'secret_password123' | jq -r .session_token)
$env:QFIELDCLOUD_TOKEN = (qfieldcloud-cli --json login "ninjamaster" "secret_password123" | jq ".session_token")
Create a project
Create a project called Tree_Survey
within your organization:
qfieldcloud-cli create-project --owner 'My_Organization_Clan' --description 'Daily work project' --is-private 'Tree_Survey'
qfieldcloud-cli create-project --owner "My_Organization_Clan" --description "Daily work project" --is-private "Tree_Survey"
The project is now created in your QFieldCloud organization, and its project ID (e.g., 123e4567-e89b-12d3-a456-426614174000
) is returned.
You’re now ready for file uploads.
If you forgot to copy your project ID, you can always check the list of all the projects on QFieldCloud.
List Your Projects
To list all projects associated with your account:
qfieldcloud-cli list-projects
qfieldcloud-cli list-projects
To include public projects in the list:
qfieldcloud-cli list-projects --include-public
qfieldcloud-cli list-projects --include-public
Upload Local Files to QFieldCloud
Prepare your local project files and upload them to QFieldCloud:
qfieldcloud-cli upload-files '123e4567-e89b-12d3-a456-426614174000' '/home/ninjamaster/QField/cloud/Tree_survey'
qfieldcloud-cli upload-files "123e4567-e89b-12d3-a456-426614174000" "C:\Users\ninjamaster\QField\cloud\Tree_survey"
You can also upload specific files by using the --filter
option.
For instance, to upload only .gpkg
files:
qfieldcloud-cli upload-files '123e4567-e89b-12d3-a456-426614174000' '/home/ninjamaster/QField/cloud/Tree_survey' --filter '*.gpkg'
qfieldcloud-cli upload-files "123e4567-e89b-12d3-a456-426614174000" "C:\Users\ninjamaster\QField\cloud\Tree_survey" --filter "*.gpkg"
Now you can upload and check your files on QFieldCloud.
List Files in a Project
To view all files in a specific project:
qfieldcloud-cli list-files '123e4567-e89b-12d3-a456-426614174000'
qfieldcloud-cli list-files "123e4567-e89b-12d3-a456-426614174000"
Manage Members and Collaborators
The collaborative nature of QFieldCloud naturally involves other people in the fieldwork.
You can add, remove, or change the members on your Organization.
Add a Member to an Organization
qfieldcloud-cli members-add 'My_Organization_Clan' 'ninja007' admin
qfieldcloud-cli members-add "My_Organization_Clan" "ninja007" admin
Change a Member's Role
qfieldcloud-cli members-patch 'My_Organization_Clan' 'ninja007' member
qfieldcloud-cli members-patch "My_Organization_Clan" "ninja007" member
Remove a Member in an Organization
qfieldcloud-cli members-remove 'My_Organization_Clan' 'ninja007'
qfieldcloud-cli members-remove "My_Organization_Clan" "ninja007"
You can add, remove, or change the roles of collaborators on your project.
Add a Collaborator in a project
qfieldcloud-cli collaborators-add '123e4567-e89b-12d3-a456-426614174000' 'ninja007' admin
qfieldcloud-cli collaborators-add "123e4567-e89b-12d3-a456-426614174000" "ninja007" admin
Change a Collaborator’s Role in a project
qfieldcloud-cli collaborators-patch '123e4567-e89b-12d3-a456-426614174000' 'ninja001' editor
qfieldcloud-cli collaborators-patch "123e4567-e89b-12d3-a456-426614174000" "ninja001" editor
Remove a Collaborator in a project
qfieldcloud-cli collaborators-remove '123e4567-e89b-12d3-a456-426614174000' 'ninja007'
qfieldcloud-cli collaborators-remove "123e4567-e89b-12d3-a456-426614174000" "ninja007"
Create and monitor jobs
Trigger job
To manually trigger a package job at any time and force if require:
qfieldcloud-cli job-trigger '123e4567-e89b-12d3-a456-426614174000' package --force
qfieldcloud-cli job-trigger "123e4567-e89b-12d3-a456-426614174000" package --force
After triggering a job, monitor job's status to ensure successful completion:
List all jobs for a specific project
Before checking the status of a job, you can list all jobs associated with a project by using the list-jobs
command.
qfieldcloud-cli list-jobs '123e4567-e89b-12d3-a456-426614174000' --type package
qfieldcloud-cli list-jobs "123e4567-e89b-12d3-a456-426614174000" --type package
Check the status of a specific job
Once you have the job ID, you can check its status using the job-status
command:
qfieldcloud-cli job-status '321e4567-e89b-12d3-a456-426614174987'
qfieldcloud-cli job-status "321e4567-e89b-12d3-a456-426614174987"
Wait for job completion
To automate the process of checking a job's status until it is finished, you can use a loop that will keep checking the status until the job either succeeds or fails.
JOB_STATUS=$(qfieldcloud-cli --json job-status '321e4567-e89b-12d3-a456-426614174987' | jq '.output' -r)
while [[ "$JOB_STATUS" != "success" && "$JOB_STATUS" != "failed" ]]; do
echo "Job is still running... Status: $JOB_STATUS"
sleep 10 # Wait for 10 seconds before checking again
JOB_STATUS=$(qfieldcloud-cli --json job-status '321e4567-e89b-12d3-a456-426614174987' | jq '.output' -r)
done
echo "Job finished with status: $JOB_STATUS"
$JOB_STATUS = (qfieldcloud-cli --json job-status "321e4567-e89b-12d3-a456-426614174987" | jq ".output" -r)
while ($JOB_STATUS -ne "success" -and $JOB_STATUS -ne "failed") {
Write-Host "Job is still running... Status: $JOB_STATUS"
Start-Sleep -Seconds 10 # Wait for 10 seconds before checking again
$JOB_STATUS = (qfieldcloud-cli --json job-status "321e4567-e89b-12d3-a456-426614174987" | jq ".output" -r)
}
Write-Host "Job finished with status: $JOB_STATUS"
Schedule and Trigger a Package Job
A more advanced example where the trigger of the job is automated.
Suppose your company packages the project every morning at 8:47 AM.:
47 8 * * * qfieldcloud-cli job-trigger '123e4567-e89b-12d3-a456-426614174000' package
This triggers the package job daily at the specified time. For more information about cronjob.
schtasks /create /tn "QFieldCloud Job Trigger" /tr "qfieldcloud-cli job-trigger '123e4567-e89b-12d3-a456-426614174000' package" /sc daily /st 08:47
This triggers the package job daily at the specified time. For more information about schtasks.
Download Files for Backup
Once the package job is complete, download the project files for backup. To download all files or filter specific ones (e.g., .jpg
files):
qfieldcloud-cli package-download '123e4567-e89b-12d3-a456-426614174000' '/home/ninjamaster/backup_folder/DCIM/2024-11-10/' --filter '*.jpg'
qfieldcloud-cli package-download "123e4567-e89b-12d3-a456-426614174000" "C:\Users\ninjamaster\backup_folder\DCIM\2024-11-10\" --filter "*.jpg"
If files already exist locally and you want to overwrite them, use the --force-download
option:
qfieldcloud-cli package-download '123e4567-e89b-12d3-a456-426614174000' '/home/ninjamaster/backup_folder/DCIM/2024-11-10/' --force-download
qfieldcloud-cli package-download "123e4567-e89b-12d3-a456-426614174000" "C:\Users\ninjamaster\backup_folder\DCIM\2024-11-10\" --force-download
Delete Files to Save Space
To free up storage on QFieldCloud, you can delete unnecessary files, such as .jpg
files:
qfieldcloud-cli delete-files '123e4567-e89b-12d3-a456-426614174000' --filter '*.jpg'
qfieldcloud-cli delete-files "123e4567-e89b-12d3-a456-426614174000" --filter "*.jpg"
You can also delete specific files by specifying their exact path:
qfieldcloud-cli delete-files '123e4567-e89b-12d3-a456-426614174000' 'DCIM/tree-202411202334943.jpg'
qfieldcloud-cli delete-files "123e4567-e89b-12d3-a456-426614174000" "DCIM\tree-202411202334943.jpg"
Delete a Project
To permanently delete a project (be cautious—this action cannot be undone):
qfieldcloud-cli delete-project '123e4567-e89b-12d3-a456-426614174000'
qfieldcloud-cli delete-project "123e4567-e89b-12d3-a456-426614174000"