UPDATE
This commit is contained in:
+121
@@ -0,0 +1,121 @@
|
||||
# Local Test Workflow
|
||||
|
||||
This project can be tested in a local virtualenv that mirrors the Python package source used by the Docker images.
|
||||
|
||||
## 1. Create the virtualenv
|
||||
|
||||
```bash
|
||||
python3 -m venv .venv-test
|
||||
source .venv-test/bin/activate
|
||||
```
|
||||
|
||||
## 2. Install dependencies with the Docker mirror
|
||||
|
||||
### Option A: full project install
|
||||
|
||||
Use this when your local Python version matches Docker (`3.10`).
|
||||
|
||||
The development Docker image installs packages from `https://mirror-pypi.runflare.com/simple`.
|
||||
|
||||
```bash
|
||||
source .venv-test/bin/activate
|
||||
pip --isolated install \
|
||||
--prefer-binary \
|
||||
--index-url https://mirror-pypi.runflare.com/simple \
|
||||
--trusted-host mirror-pypi.runflare.com \
|
||||
-c constraints.txt \
|
||||
-r requirements.txt
|
||||
```
|
||||
|
||||
### Option B: focused openEO test install
|
||||
|
||||
I used this path successfully on a host with Python `3.14`, where the pinned full requirements are not Docker-compatible because the project pins older `numpy` for Python `3.10`.
|
||||
|
||||
```bash
|
||||
source .venv-test/bin/activate
|
||||
pip --isolated install \
|
||||
--prefer-binary \
|
||||
--index-url https://mirror-pypi.runflare.com/simple \
|
||||
--trusted-host mirror-pypi.runflare.com \
|
||||
Django \
|
||||
requests \
|
||||
PySocks \
|
||||
openeo \
|
||||
python-dotenv \
|
||||
Pillow
|
||||
```
|
||||
|
||||
If the mirror is temporarily slow in your environment, retry the same command once more before changing indexes.
|
||||
|
||||
## 3. Run the focused openEO test file
|
||||
|
||||
### Standard Django command
|
||||
|
||||
```bash
|
||||
source .venv-test/bin/activate
|
||||
python manage.py test location_data.test_openeo_service
|
||||
```
|
||||
|
||||
### Minimal runner used on a non-Docker local setup
|
||||
|
||||
This avoids loading the whole project URL tree and only boots the apps needed by `location_data.test_openeo_service`.
|
||||
|
||||
```bash
|
||||
source .venv-test/bin/activate
|
||||
python - <<'PY'
|
||||
import sys, types
|
||||
import django
|
||||
from django.conf import settings
|
||||
from django.urls import path
|
||||
|
||||
url_module = types.ModuleType("local_test_urls")
|
||||
url_module.urlpatterns = [path("__test__/", lambda request: None)]
|
||||
sys.modules["local_test_urls"] = url_module
|
||||
|
||||
settings.configure(
|
||||
SECRET_KEY="test-secret",
|
||||
USE_TZ=True,
|
||||
DATABASES={"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": ":memory:"}},
|
||||
INSTALLED_APPS=[
|
||||
"django.contrib.auth",
|
||||
"django.contrib.contenttypes",
|
||||
"location_data",
|
||||
],
|
||||
MIDDLEWARE=[],
|
||||
ROOT_URLCONF="local_test_urls",
|
||||
DEFAULT_AUTO_FIELD="django.db.models.BigAutoField",
|
||||
)
|
||||
|
||||
django.setup()
|
||||
from django.test.utils import get_runner
|
||||
|
||||
runner = get_runner(settings)()
|
||||
failures = runner.run_tests(["location_data.test_openeo_service"])
|
||||
raise SystemExit(bool(failures))
|
||||
PY
|
||||
```
|
||||
|
||||
## 4. Run the broader location-data suite
|
||||
|
||||
```bash
|
||||
source .venv-test/bin/activate
|
||||
python manage.py test location_data
|
||||
```
|
||||
|
||||
## 5. Run a syntax-only validation
|
||||
|
||||
This is useful when dependencies are still being installed or when you want a very fast sanity check.
|
||||
|
||||
```bash
|
||||
python3 -m py_compile \
|
||||
location_data/openeo_service.py \
|
||||
location_data/tasks.py \
|
||||
location_data/test_openeo_service.py \
|
||||
config/proxy.py
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- The openEO request timeout is configured through `OPENEO_TIMEOUT_SECONDS`.
|
||||
- The current default in code and `.env.example` is `600` seconds.
|
||||
- openEO request logging is emitted from `location_data.openeo_service`, including request payloads, process graphs, downloaded batch result files, and parse failures.
|
||||
Reference in New Issue
Block a user