Query the cantonal geoservices to know whether a site in Switzerland is suitable for a geothermal drilling.
This project uses UV for dependency management.
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>Create .env file and
Special attention to the ENVIRONMENT value, MUST never be set to DEV in production environnement
cp env.example .envInstall dependencies using UV
uv syncFor dev install dev requirements
uv sync --extra devActivate pre-commit
uv run pre-commit installRun pre-commit manually
uv run pre-commit run --all-filesRun 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