From 0f8086bd15963875f841cfc5891fbbc8d61c3960 Mon Sep 17 00:00:00 2001 From: gabriel Date: Sun, 5 Jul 2026 16:38:54 +0200 Subject: [PATCH] chore: move test/dev dependencies from extras to dependency groups Extras are not installed by a plain `uv run`, so `uv run pytest` fell back to any pytest on PATH, testing against whatever epaper_colorcal that interpreter could import instead of the current tree. As dependency groups (dev includes test), they are synced by default. The serial and opendisplay extras stay extras: they are runtime features. --- README.md | 2 +- pyproject.toml | 26 ++++++++++++++------------ uv.lock | 42 ++++++++++++++++++++++++++++-------------- 3 files changed, 43 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 40d696e..9185e0c 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ D65/2° to match the dithering pipeline), plus a JSON sidecar of the raw spectra ```bash # clone, then: -uv sync --all-extras # dev + test + serial +uv sync --all-extras # dev + test (default) + serial + opendisplay # or, to actually talk to the device: uv sync --extra serial ``` diff --git a/pyproject.toml b/pyproject.toml index 0a517c5..82b4979 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,18 +39,6 @@ serial = [ opendisplay = [ "py-opendisplay>=7.9.0", ] -test = [ - "pytest>=9.0.2", - "pytest-cov>=7.0.0", - "pytest-asyncio>=1.3.0", -] -dev = [ - "mypy>=1.19.1", - "prek>=0.3.4", - "pylint>=4.0.5", - "ruff>=0.14.10", -] - [project.scripts] epaper-colorcal = "epaper_colorcal.measure_palette:main" @@ -126,3 +114,17 @@ filterwarnings = [ "ignore:.*related API features are not available.*", "ignore:.*Aligning .* shape.*", ] + +[dependency-groups] +dev = [ + "mypy>=1.19.1", + "prek>=0.3.4", + "pylint>=4.0.5", + "ruff>=0.14.10", + { include-group = "test" }, +] +test = [ + "pytest>=9.0.2", + "pytest-cov>=7.0.0", + "pytest-asyncio>=1.3.0", +] diff --git a/uv.lock b/uv.lock index 0fbd5ef..bd83dec 100644 --- a/uv.lock +++ b/uv.lock @@ -416,18 +416,23 @@ dependencies = [ ] [package.optional-dependencies] -dev = [ - { name = "mypy" }, - { name = "prek" }, - { name = "pylint" }, - { name = "ruff" }, -] opendisplay = [ { name = "py-opendisplay" }, ] serial = [ { name = "pyserial-asyncio" }, ] + +[package.dev-dependencies] +dev = [ + { name = "mypy" }, + { name = "prek" }, + { name = "pylint" }, + { name = "pytest" }, + { name = "pytest-asyncio" }, + { name = "pytest-cov" }, + { name = "ruff" }, +] test = [ { name = "pytest" }, { name = "pytest-asyncio" }, @@ -437,18 +442,27 @@ test = [ [package.metadata] requires-dist = [ { name = "colour-science", specifier = ">=0.4.4" }, - { name = "mypy", marker = "extra == 'dev'", specifier = ">=1.19.1" }, { name = "numpy", specifier = ">=1.24" }, - { name = "prek", marker = "extra == 'dev'", specifier = ">=0.3.4" }, { name = "py-opendisplay", marker = "extra == 'opendisplay'", specifier = ">=7.9.0" }, - { name = "pylint", marker = "extra == 'dev'", specifier = ">=4.0.5" }, { name = "pyserial-asyncio", marker = "extra == 'serial'", specifier = ">=0.6" }, - { name = "pytest", marker = "extra == 'test'", specifier = ">=9.0.2" }, - { name = "pytest-asyncio", marker = "extra == 'test'", specifier = ">=1.3.0" }, - { name = "pytest-cov", marker = "extra == 'test'", specifier = ">=7.0.0" }, - { name = "ruff", marker = "extra == 'dev'", specifier = ">=0.14.10" }, ] -provides-extras = ["serial", "opendisplay", "test", "dev"] +provides-extras = ["serial", "opendisplay"] + +[package.metadata.requires-dev] +dev = [ + { name = "mypy", specifier = ">=1.19.1" }, + { name = "prek", specifier = ">=0.3.4" }, + { name = "pylint", specifier = ">=4.0.5" }, + { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest-asyncio", specifier = ">=1.3.0" }, + { name = "pytest-cov", specifier = ">=7.0.0" }, + { name = "ruff", specifier = ">=0.14.10" }, +] +test = [ + { name = "pytest", specifier = ">=9.0.2" }, + { name = "pytest-asyncio", specifier = ">=1.3.0" }, + { name = "pytest-cov", specifier = ">=7.0.0" }, +] [[package]] name = "epaper-dithering"