Skip to content
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions dandi/pytest_plugin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
from __future__ import annotations

from importlib.metadata import PackageNotFoundError, requires, version

from dandischema.models import DandiBaseModel
from packaging.requirements import Requirement
from pytest import Config, Item, Parser

from .tests.fixtures import * # noqa: F401, F403 # lgtm [py/polluting-import]
Expand Down Expand Up @@ -32,6 +35,29 @@ def pytest_configure(config):
config.addinivalue_line("markers", marker)


def pytest_report_header(config: Config) -> list[str]:
"""Add version information for key dependencies to the pytest header."""
try:
# Extract package names from requirement strings.
# Format: "package-name >= 1.0" or "package-name ; condition"
# and by regex thus we skip extras (in square brackets like [test])
deps = {Requirement(dep).name for dep in (requires("dandi") or [])}
except PackageNotFoundError:
# Use defaults if we didn't get deps from metadata
deps = {"dandischema", "h5py", "hdmf"}

# Format versions for display (sorted for consistent output)
versions = []
for pkg in sorted(deps):
try:
version_str = f"-{version(pkg)}"
except PackageNotFoundError:
version_str = " missing"
versions.append(f"{pkg}{version_str}")

return [f"dependencies: {', '.join(versions)}"] if versions else []


def pytest_collection_modifyitems(items: list[Item], config: Config) -> None:
# Based on <https://pythontesting.net/framework/pytest/pytest-run-tests
# -using-particular-fixture/>
Expand Down