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.1.tar.gz (120.1 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.1-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: snakemk_util-3.0.1.tar.gz
  • Upload date:
  • Size: 120.1 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.1.tar.gz
Algorithm Hash digest
SHA256 8416b753e959b5e6cf0b2b59cd4b09834c9a2dc55c97f9b60fdc8909dc1ee4e8
MD5 b34cb9bff8e1f4aca980a9d08c7a64b0
BLAKE2b-256 1d35e9606c213579da0c94985393d5647039f22f83137f8a02443472face8d88

See more details on using hashes here.

Provenance

The following attestation bundles were made for snakemk_util-3.0.1.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.1-py3-none-any.whl.

File metadata

  • Download URL: snakemk_util-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.4 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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1fc865c42b1829fa9dd26379bd186c30bc2e86e4e5f18e3bad29276595591d66
MD5 a67a77e975a75620047fba0c8a64855a
BLAKE2b-256 67dec624a7859e12b6122afc97968d510dc916bd1437579fb1a46333ae703c0a

See more details on using hashes here.

Provenance

The following attestation bundles were made for snakemk_util-3.0.1-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