A minimal library for writing tests with optional dependencies.
Project description
Needy
A tiny library for writing tests that depend on optional packages, without having everything crash when a package you need is just not there…
Installation
Python 3.11+ is required.
pip install pyneedy # needy was already taken ( ╥_╥)
Quick Start
Define a probe for the optional dependency you want to use, like JAX:
def jax_module() -> None:
import jax as jax
Then just mark the tests that need it with @needs.to_run(...):
from needy import needs
@needs.to_run(jax_module)
def test_that_uses_jax() -> None:
import jax.numpy as jnp
assert jnp.array([1.0, 2.0]).sum() == 3.0
If jax is installed, the test runs. If it isn't, the test is just skipped instead of crashing the whole suite. Yay!
For optional imports at the top of a file (which would normally fail at collection time), use needs.modules(...). See the docs for more.
Documentation
| Getting started | The basics: probes and @needs.to_run(...) |
| Optional imports | Handle missing modules at import time with needs.modules |
| Subtests | Mix required and optional paths in one test |
| API reference | Every type and function in one place |
Development
Prerequisites:
Get set up:
git clone https://gitlab.com/pytooling/needy.git
cd needy
uv sync
uv run pre-commit install
Run all checks (lint, format, type-check, tests):
just check
Or manually:
uv run ruff check --fix && uv run ruff format && uv run pyright && uv run pytest
License
MIT, see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyneedy-1.4.0.tar.gz.
File metadata
- Download URL: pyneedy-1.4.0.tar.gz
- Upload date:
- Size: 58.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
360285439c9f7d12bda445834734224a7a7f3d508d41d48edcbe62f51f8fa03e
|
|
| MD5 |
c324f380324252c4ba22486b3e5f753d
|
|
| BLAKE2b-256 |
fc75cd7e3b8e6ccf2eaa6931fba6b9d9c4bd5a6f8503bdaeda9b74bab68ce4fe
|
File details
Details for the file pyneedy-1.4.0-py3-none-any.whl.
File metadata
- Download URL: pyneedy-1.4.0-py3-none-any.whl
- Upload date:
- Size: 13.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9154f3fc61572efd9aee0abff728f916dd804784cdcacb56373a4911d1c6145
|
|
| MD5 |
ab8ebd5dd8ed956846a4ba1d062e5012
|
|
| BLAKE2b-256 |
01ed251e31a5bd454328d1548b7a21c530a98ef7a19c92060c0aa59012e4c2ed
|