# 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.