Skip to main content

utility functions for snakemake

Project description

Snakemake Utility functions for easier working with snakemake

When debugging a script that uses snakemake to define its inputs, it is often difficult to manually set some example inputs for testing. This utility allows to directly obtain a Snakemake object from the pipeline by specifying the desired rule and wildcards.

Loading snakemake object without actually running snakemake

For obtaining a Snakemake object in python, simply paste the following preamble in your script and adjust snakefile_path, rule_name and default_wildcards.

try:
    snakemake
except NameError:
    import os
    from snakemk_util import load_rule_args, pretty_print_snakemake
    
    snakefile_path = os.getcwd() + "/Snakefile"
    snakemake = load_rule_args(
        snakefile = snakefile_path,
        rule_name = 'create_prediction_target',
        default_wildcards={
            'ds_dir': 'all_data'
        }
    )
    print(pretty_print_snakemake(snakemake))

Output:

Snakemake({
  "threads": 64,
  "resources": {
    "_cores": 64,
    "_nodes": 1,
    "tmpdir": "<function DefaultResources.__init__.<locals>.fallback.<locals>.callable at 0x154022f799d0>",
    "ntasks": 1,
    "mem_mb": 250000
  },
  "input": {
    "0": "some_input.csv"
    "config": "some_config.yaml",
  },
  "params": {
    "nb_script": "create_prediction_target.py"
  },
  "output": {
    [...]
  },
  "wildcards": {
    "ds_dir": "all_data"
  },
  "log": [],
  "config": {
    [...]
  },
  "rule": "create_prediction_target"
})
  • The preamble has no effect during snakemake runs, so it can be kept in the script permanently.
  • pretty_print_snakemake knows about the NamedList that snakemake uses and prints all non-named parameters by their index

Here the corresponding snippet for R:

if (! exists("snakemake")) {
    snakefile = "Snakefile"
    rule = "create_prediction_target"
    python = "/opt/anaconda/envs/snakemake/bin/python"
    wildcards = c(
        # "comparison=all",
    )

    cmd=c(
        "-m snakemk_util.main",
        "--rule", rule,
        "--snakefile", normalizePath(snakefile),
        "--root_dir", dirname(normalizePath(snakefile)),
        "--gen-preamble", "RScript",
        "--create_dirs",
        if (length(wildcards) > 0) c("--wildcards", wildcards) else NULL
    )
    eval(parse(text=system2(python, cmd, stdout=TRUE, stderr="")))
}

Inspecting the rule parameters on the command line

snakemk_util also provides a command-line interface which allows to display the snakemake objects for some rule and wildcard as well as generating script preambles for different languages:

# snakemk_util --help
usage: snakemk_util [-h] --rule RULE_NAME [--gen-preamble FLAVOR] [--snakefile SNAKEFILE] [--root_dir ROOT_DIR] [--wildcards [KEY=VALUE ...]] [--create_dirs]

Utility to sow Snakemake rule contents and creating script preambles without actually running Snakemake.

optional arguments:
  -h, --help            show this help message and exit
  --rule RULE_NAME      Name of the rule that should be formatted
  --gen-preamble FLAVOR
                        Script language for which the preamble should be generated Examples: 'BashScript', 'JuliaScript', 'PythonScript', 'RMarkdown', 'RScript', 'RustScript', 'PythonJupyterNotebook', 'RJupyterNotebook'
  --snakefile SNAKEFILE
                        path to the Snakefile
  --root_dir ROOT_DIR   Root directory from where you would run the `snakemake` command. By default, this is the current working directory.
  --wildcards [KEY=VALUE ...]
                        Wildcards used to format the rule output, given as space-separated 'key=value' tokens. Example: --wildcards wildcard0=x wildcard1=y
  --create_dirs         Create the output directories for the rule

Installation

pip install snakemk_util

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

snakemk_util-3.0.0.tar.gz (119.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

snakemk_util-3.0.0-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

File details

Details for the file snakemk_util-3.0.0.tar.gz.

File metadata

  • Download URL: snakemk_util-3.0.0.tar.gz
  • Upload date:
  • Size: 119.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for snakemk_util-3.0.0.tar.gz
Algorithm Hash digest
SHA256 b312c162ae2c41bd68c08ac70bd85a75ee6c888d70b11d6bcc2138643d090587
MD5 12b6361e47d354977cf6368f3967b739
BLAKE2b-256 cbfb26e77c6feb7c8d7a0e95b97b6bcd5885844e088a5e997ee961ebb99a14e4

See more details on using hashes here.

Provenance

The following attestation bundles were made for snakemk_util-3.0.0.tar.gz:

Publisher: publish.yml on Hoeze/snakemk_util

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file snakemk_util-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: snakemk_util-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for snakemk_util-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 21d7f4ad990e01f522bf036c0ba484a3626d1550965cb158a4a52803e9742fdf
MD5 b2c0adad25e3348dc8b868b71a9d3741
BLAKE2b-256 60131b8d9a177f3bbd9f147896ce2d2d7420d38d644ba7c63d1400dd8b2972b4

See more details on using hashes here.

Provenance

The following attestation bundles were made for snakemk_util-3.0.0-py3-none-any.whl:

Publisher: publish.yml on Hoeze/snakemk_util

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page