Lightweight contract helpers for Snakemake modules
Project description
snakemake-contracts
A small helper library for Snakemake workflows that use
provides / requires-style contracts between modules.
Motivation
A lot of hidden complexities can stem from splitting a snakemake-based project into multiple independent submodules: how do you handle changing independent submodule outputs ?
This package exists for workflows that are split into many Snakemake submodules and need a disciplined way to connect them.
In practice, the goal is not just to reuse code. It is to make module boundaries explicit and stable:
- each module should declare what it consumes and what it exposes;
- each module should keep its own outputs defined in one place;
- the root workflow should not become the only place that knows where every generated file lives.
That matters once a workflow grows beyond a single Snakefile. At that point the top-level repo tends to accumulate accidental knowledge about other modules: hard-coded file paths, config overrides for foreign outputs, and ad hoc assumptions about directory layouts. Those shortcuts make the graph harder to reason about and much easier to break when a module changes shape.
The contract model used here is intentionally close to the requires /
provides style found in systems like nREPL middleware chains: producers
declare the interface they offer, consumers ask for a named capability, and the
resolver stays small and mechanical. The point is to treat the dependency
boundary as a contract, not as an implicit convention spread across the whole
repository.
Using provides.yaml as the source of truth also has a practical benefit: the
module itself remains the authoritative owner of its exported outputs. The repo
root can still orchestrate modules, but it does not need to mirror every output
name or path in a central registry. That reduces duplication and keeps the
dependency metadata next to the module that owns it.
Scope
- resolve declared outputs by logical key
- locate module output directories
- validate
provides.yamlfiles - optionally compare declared contracts against a repo layout
Library Usage
The core API lives in snakemake_contracts.contracts and expects a repo layout
like:
repo/
modules/
my_module/
Snakefile
provides.yaml
out/
Typical usage:
from snakemake_contracts.contracts import load_provides, provides, validate_repo
mapping = load_provides("my_module", repo_root="/path/to/repo")
report = provides("my_module", "report", repo_root="/path/to/repo")
problems = validate_repo("/path/to/repo")
provides.yaml is the source of truth for logical output names, and provides()
resolves them relative to the module's out/ directory.
Wrapper Layer
The repository also includes a separate package, snakemake_contracts_wrapper
(in wrapper/), for Snakemake-facing command construction: it turns the named
input/output/log/params objects on a rule into script CLI arguments.
See wrapper/README.md for usage and its surface.
Current Surface
load_provides(module, repo_root=None)provides(module, key, repo_root=None)out_dir(module, repo_root=None)list_modules(repo_root=None)mangle(name)validate_repo(repo_root=None)
Tests
tests/test_contracts.pyexercises the library directly against a temporary repo layout.tests/test_wrapper.pycovers the wrapper command helpers (seewrapper/README.mdfor the wrapper package itself).
Status
This is a small utility package, not a general Snakemake extension. It is meant
to support workflows that already use provides.yaml-style contracts and want a
single place to validate and resolve them.
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 snakemake_contracts-0.4.1.tar.gz.
File metadata
- Download URL: snakemake_contracts-0.4.1.tar.gz
- Upload date:
- Size: 8.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c890bf5e5ec23d6bcee9f788590d9b411c6704e079658d9b8b278143497a36e9
|
|
| MD5 |
ad1832031b60dae296bdb99b55d0a258
|
|
| BLAKE2b-256 |
1ceb2a0679bcabf8ecc44ddfccd2dbcec3170068ae2df0b4894c94fe2a2e5936
|
File details
Details for the file snakemake_contracts-0.4.1-py3-none-any.whl.
File metadata
- Download URL: snakemake_contracts-0.4.1-py3-none-any.whl
- Upload date:
- Size: 5.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
03e67f693310f5a73a54df62693c9f4c6e07a61f8c4aa4615eadb071b0088419
|
|
| MD5 |
24f2cc4747e31cad55bb03c4793e1850
|
|
| BLAKE2b-256 |
f37ebf1c94ddd4b4f9674582e31fb846ce780539c48b10e570828494ca78c99b
|