From 888f85a3b76280816dcc7a5bab550366a9d6165c Mon Sep 17 00:00:00 2001 From: Jazzcort Date: Thu, 20 Aug 2026 15:39:35 -0400 Subject: [PATCH 1/4] fix: Skip tests when running without dependencies from the root (griffe) When running tests within `griffelib` alone as root, importing `griffecli` and `mkdocstrings` at module level causes `ModuleNotFoundError`. Defer these imports and guard them with `pytest.importorskip()` so the tests skip gracefully instead of failing. --- packages/griffelib/tests/test_api.py | 14 +++++++++++--- packages/griffelib/tests/test_git.py | 5 ++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/griffelib/tests/test_api.py b/packages/griffelib/tests/test_api.py index 835755a0..6c65c8da 100644 --- a/packages/griffelib/tests/test_api.py +++ b/packages/griffelib/tests/test_api.py @@ -24,25 +24,33 @@ from typing import TYPE_CHECKING import pytest -from mkdocstrings import Inventory import griffe -import griffecli + +try: + import griffecli +except ModuleNotFoundError: + griffecli = None if TYPE_CHECKING: from collections.abc import Iterable, Iterator from types import ModuleType + from mkdocstrings import Inventory + -TESTED_MODULES = (griffe, griffecli) +TESTED_MODULES = (griffe, griffecli) if griffecli else (griffe,) _test_all_modules = pytest.mark.parametrize("tested_module", TESTED_MODULES) @pytest.fixture(name="inventory", scope="module") def _fixture_inventory() -> Inventory: + pytest.importorskip("mkdocstrings") inventory_file = Path(__file__).parent.parent / "site" / "objects.inv" if not inventory_file.exists(): pytest.skip("The objects inventory is not available.") + from mkdocstrings import Inventory + with inventory_file.open("rb") as file: return Inventory.parse_sphinx(file) diff --git a/packages/griffelib/tests/test_git.py b/packages/griffelib/tests/test_git.py index 0552eabe..1a7018a8 100644 --- a/packages/griffelib/tests/test_git.py +++ b/packages/griffelib/tests/test_git.py @@ -24,7 +24,7 @@ import pytest -from griffe import Module, check, load_git +from griffe import Module, load_git from tests import FIXTURES_DIR if TYPE_CHECKING: @@ -117,4 +117,7 @@ def test_load_git_errors(git_repo: Path) -> None: def test_git_failures(tmp_path: Path) -> None: """Test failures to use Git.""" + pytest.importorskip("griffecli") + from griffe import check + assert check(tmp_path) == 2 From c0118f59f666b369b96037d2c34d6e2b83c8ea51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Mazzucotelli?= Date: Fri, 21 Aug 2026 12:21:05 +0200 Subject: [PATCH 2/4] fixup! fix: Skip tests when running without dependencies from the root (griffe) --- packages/griffelib/tests/test_api.py | 5 ++--- packages/griffelib/tests/test_git.py | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/griffelib/tests/test_api.py b/packages/griffelib/tests/test_api.py index 6c65c8da..02ada44f 100644 --- a/packages/griffelib/tests/test_api.py +++ b/packages/griffelib/tests/test_api.py @@ -45,14 +45,13 @@ @pytest.fixture(name="inventory", scope="module") def _fixture_inventory() -> Inventory: - pytest.importorskip("mkdocstrings") + mkdocstrings = pytest.importorskip("mkdocstrings") inventory_file = Path(__file__).parent.parent / "site" / "objects.inv" if not inventory_file.exists(): pytest.skip("The objects inventory is not available.") - from mkdocstrings import Inventory with inventory_file.open("rb") as file: - return Inventory.parse_sphinx(file) + return mkdocstrings.Inventory.parse_sphinx(file) def _load_modules(*modules: ModuleType) -> griffe.GriffeLoader: diff --git a/packages/griffelib/tests/test_git.py b/packages/griffelib/tests/test_git.py index 1a7018a8..877b11fd 100644 --- a/packages/griffelib/tests/test_git.py +++ b/packages/griffelib/tests/test_git.py @@ -118,6 +118,6 @@ def test_load_git_errors(git_repo: Path) -> None: def test_git_failures(tmp_path: Path) -> None: """Test failures to use Git.""" pytest.importorskip("griffecli") - from griffe import check + from griffe import check # noqa: PLC0415 assert check(tmp_path) == 2 From 32abf9bcc0d9ca7568653eb387e00297fb1fbbff Mon Sep 17 00:00:00 2001 From: Jazzcort Date: Fri, 21 Aug 2026 15:52:01 -0400 Subject: [PATCH 3/4] Make importing griffe-inherited-docstrings optional for tests --- packages/griffelib/tests/test_api.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/griffelib/tests/test_api.py b/packages/griffelib/tests/test_api.py index 02ada44f..d4d29edb 100644 --- a/packages/griffelib/tests/test_api.py +++ b/packages/griffelib/tests/test_api.py @@ -55,11 +55,15 @@ def _fixture_inventory() -> Inventory: def _load_modules(*modules: ModuleType) -> griffe.GriffeLoader: + extensions = ["unpack_typeddict"] + try: + import griffe_inherited_docstrings # noqa: F401, PLC0415 + + extensions.append("griffe_inherited_docstrings") + except ImportError: + pass loader = griffe.GriffeLoader( - extensions=griffe.load_extensions( - "griffe_inherited_docstrings", - "unpack_typeddict", - ), + extensions=griffe.load_extensions(*extensions), ) for module in modules: loader.load(module.__name__) From 3c1826f59753d8ec0b5400a1dc52a4534fc13df0 Mon Sep 17 00:00:00 2001 From: Jazzcort Date: Fri, 21 Aug 2026 16:01:37 -0400 Subject: [PATCH 4/4] Add test dependencies --- packages/griffelib/pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/griffelib/pyproject.toml b/packages/griffelib/pyproject.toml index cf6b4733..0794ded8 100644 --- a/packages/griffelib/pyproject.toml +++ b/packages/griffelib/pyproject.toml @@ -41,6 +41,9 @@ classifiers = [ # to download and inspect packages from PyPI. pypi = ["pip>=24.0", "platformdirs>=4.2", "wheel>=0.42"] +[dependency-groups] +dev = ["pytest>=8.2", "pytest-gitconfig>=0.8.0", "jsonschema>=4.18"] + [tool.uv-dynamic-versioning] pattern = '(?P\d+\.\d+\.\d+)'