snakemake-wrappers
snakemake-wrappers copied to clipboard
feat: BWA mem2 index - remove prefix parameter and determine prefix from output
Description
Remove the param prefix and detect prefix by output
QC
For all wrappers added by this PR, I made sure that
- [x] there is a test case which covers any introduced changes,
- [x]
input:andoutput:file paths in the resulting rule can be changed arbitrarily, - [x] either the wrapper can only use a single core, or the example rule contains a
threads: xstatement withxbeing a reasonable default, - [x] rule names in the test case are in snake_case and somehow tell what the rule is about or match the tools purpose or name (e.g.,
map_readsfor a step that maps reads), - [x] all
environment.yamlspecifications follow the respective best practices, - [x] wherever possible, command line arguments are inferred and set automatically (e.g. based on file extensions in
input:oroutput:), - [x] all fields of the example rules in the
Snakefiles and their entries are explained via comments (input:/output:/params:etc.), - [x]
stderrand/orstdoutare logged correctly (log:), depending on the wrapped tool, - [x] temporary files are either written to a unique hidden folder in the working directory, or (better) stored where the Python function
tempfile.gettempdir()points to (see here; this also means that using any Pythontempfiledefault behavior works), - [x] the
meta.yamlcontains a link to the documentation of the respective tool or command, - [x]
Snakefiles pass the linting (snakemake --lint), - [x]
Snakefiles are formatted with snakefmt, - [x] Python wrapper scripts are formatted with black.
Wouldn't it be cleaner to infer the prefix with os.path.commonprefix()?
Btw, since you are fixing the bwa-mem2 wrapper, do you think you could look into issue #522? It seems a straightforward fix...
Thanks!
Like mentioned on issue #494, maybe we can define a function to infer the prefixes and add it to snakemake-wrapper-utils. Someting like:
def infer_prefix(files, suffixes, strict = True):
prefixes = []
suffixes = set(suffixes)
for file in files:
for suffix in suffixes:
if file.endswith(suffix):
prefixes.append(file[:-len(suffix)])
if len(prefixes) != len(files) and strict:
raise ValueError("All files must have a valid suffix.")
if len(set(prefixes)) != 1:
raise ValueError("All files must share common prefix.")
return prefixes[0]