Query the cantonal geoservices to know whether a site in Switzerland is suitable for a geothermal drilling.
What does this FastAPI project do ?
- take x/y coordinates in EPSG:2056 on route
/v1/x/y - find in which canton the coordinates are and retrieve specific geoservice configuration
- send request to corresponding cantonal geoservices, depending on location
- process and reclass the results (1: OK, 2: With restriction, 3: Forbidden, 4: Unknown or Service Error)
- return reponse used by drill-frontend vuejs web app
This project can run in docker:
Latest image
docker run -d \
-p 8000:8000 \
-e RATE_LIMIT="1000/minute" \
-e ALLOWED_ORIGINS='["http://localhost:5173","https://www.uvek-gis.admin.ch/"]' \
-e ENVIRONMENT=PROD \
ghcr.io/sfoe/drillapi:latestRelease specific image
docker run -d \
-p 8000:8000 \
-e RATE_LIMIT="1000/minute" \
-e ALLOWED_ORIGINS='["http://localhost:5173","https://www.uvek-gis.admin.ch/"]' \
-e ENVIRONMENT=PROD \
ghcr.io/sfoe/drillapi:<vx.y.z>This project uses UV
Create .env file and
Special attention to the ENVIRONMENT value, MUST never be set to DEV in production environnement
cp env.example .envuv syncFor dev install dev requirements
uv sync --extra devUse Ruff
Check
uv run ruff check --fixFormat
uv run ruff format .Dependabot is configured to search for update on a weekly basis and open PRs when necessary.
If you need to update on an emergency, you can update manually.
uv lock --upgradeRun dev server
uv run uvicorn drillapi.app:app --reloadRun project
uv run python -m drillapiOpenAPI doc
http://127.0.0.1:8000/docsChecker that sends predefined calls to all configured cantons
http://127.0.0.1:8000/checkerOr check one canton only
http://127.0.0.1:8000/checker/VDMain route v1
http://127.0.0.1:8000/v1/drill-category/2602531.09/1202835.00Canton's configuration v1
http://127.0.0.1:8000/v1/cantonsCanton's configuration v1 for one canton's code ("NE", "BE")
http://127.0.0.1:8000/v1/cantons/NEInstall dev requirements
uv sync --extra devRun tests
uv run python -m pytest -vdocker compose up -d --build && docker compose logs -f drillapiBuild local image
docker build -t drillapi .Run container
docker run -d -p 8000:8000 --name drillapi_container drillapiBuild lambda image locally
sudo docker build -t drillapi-lambda .Run lambda image locally
docker run -p 9000:8000 drillapi-lambdaView logs for docker image
docker logs -f drillapi_containerStop container
docker stop drillapi_container
docker rm drillapi_container