{"id":18448842,"url":"https://github.com/sequana/sequana-wrappers","last_synced_at":"2026-02-03T14:32:54.400Z","repository":{"id":42003134,"uuid":"374605246","full_name":"sequana/sequana-wrappers","owner":"sequana","description":"The Sequana Wrapper Repository is a collection of reusable wrappers used in Sequana Pipelines.","archived":false,"fork":false,"pushed_at":"2025-11-16T21:31:29.000Z","size":16389,"stargazers_count":0,"open_issues_count":9,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-16T23:18:57.920Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"CAP CDS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sequana.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-07T09:17:12.000Z","updated_at":"2025-11-16T21:26:03.000Z","dependencies_parsed_at":"2023-01-27T21:31:37.121Z","dependency_job_id":"f5ebbc84-10aa-444c-ba75-8b8392a67743","html_url":"https://github.com/sequana/sequana-wrappers","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/sequana/sequana-wrappers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sequana%2Fsequana-wrappers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sequana%2Fsequana-wrappers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sequana%2Fsequana-wrappers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sequana%2Fsequana-wrappers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sequana","download_url":"https://codeload.github.com/sequana/sequana-wrappers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sequana%2Fsequana-wrappers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29047565,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T07:17:25.775Z","updated_at":"2026-02-03T14:32:54.381Z","avatar_url":"https://github.com/sequana.png","language":"CAP CDS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Sequana Wrapper Repository\n\nThe Sequana Wrapper Repository is a collection of reusable wrappers used in the [Sequana Pipelines](https://sequana.readthedocs.io). This repository is inspired from [Snakemake Wrapper Repository](https://github.com/snakemake/snakemake-wrappers/). All the Sequana wrappers can can be used in your Snakemake pipelines as well.\n\n\n[![Tests](https://github.com/sequana/sequana-wrappers/actions/workflows/main.yml/badge.svg)](https://github.com/sequana/sequana-wrappers/actions/workflows/main.yml)\n[![Tests](http://joss.theoj.org/papers/10.21105/joss.00352/status.svg)](http://joss.theoj.org/papers/10.21105/joss.00352)\n\n\n|||\n| --- | --- |\n| Overview | A set of Snakemake wappers to help building Sequana pipelines |\n|Status | Production |\n|Issues | Please fill a report on [github/sequana/sequana-wrappers](https://github.com/sequana/sequana/issues) |\n|Python version | Python 3.8, 3.9, 3.10|\n|Citation| Cokelaer et al, (2017), ‘Sequana’: a Set of Snakemake NGS pipelines, Journal of Open Source Software, 2(16) ), 352,  [JOSS DOI doi:10.21105/joss.00352 ](http://www.doi2bib.org/bib/10.21105%2Fjoss.00352) |\n\n\n# Usage\n\n    snakemake --wrapper-prefix https://github.com/sequana/sequana-wrappers\n\nor with a local copy in /home/user:\n\n    cd\n    git clone git@github.com:sequana/sequana-wrappers.git sequana_wrappers\n    snakemake --wrapper-prefix git+file:///home/user/sequana_wrappers\n\nNote that if you define a variable SEQUANA_WRAPPERS=git+file:///home/user/sequana_wrappers all pipelines will\nautomatically set the --wraper-prefix to this variable content.\n\n# Notes for developers\n\n## Overview\n\nThe wrappers/ directory contains the wrappers themselves. Each sub-directory is dedicated to\na wrapper that is related to a given software/application. A sub directory may have several wrappers (e.g., bwa has a sub directory related to the indexing, and a sub directory related to mapping).\n\nHere is an example of a wrapper tree structure:\n\n    fastqc\n    ├── environment.yaml\n    ├── README.md\n    ├── test\n    │   ├── README.md\n    │   ├── Snakefile\n    │   ├── test_R1_.fastq\n    │   └── test_R2_.fastq\n    └── wrapper.py\n\nNote that some software may have several sub wrappers (see the bowtie1 wrapper for instance).\n\nA wrapper directory must contain a file called **wrapper.py** where the\ndevelopers must provide the core of the wrapper. There is no specific\ninstructions here except to write good code as much as possible (with comments).\n\nA wrapper directory should have a **test** directory for continuous integration\nwith a **Snakefile** to be tested and possibly data file **Do not add large files here**. A\n**README.md** should be added to explain the origin of the test data files.\nFinally, include your tests in the main [**test.py**](test.py) file\nof the root of the repository (not the wrapper itself).\n\nFor testing purposes, you should also add a file called **environment.yaml**\nto tell what are the required packages to be installed for the test (and wrapper)\nto work.\n\nFinally, for the documentation, we ask the developer to create a **README.md** file\ndescribed here below.\n\nTo test your new wrapper (called *example* here), type:\n\n   pytest test.py -k test_example\n\n## The config file\n\nIf required in a wrapper, parameters must be defined in a **config.yaml** file.\nSimilarly for threading. Consider the following pointswhen writting a wrapper:\n\n- The thread paramter should also be a parameter in config file.\n- the **params** section should contain a key called **options** also define in the config file.\n- keys or parameters related to directories and files should use the *_directory* or *_file* suffices. This is for\n  Sequanix application to automatically recognised those options with a dedicated widget.\n\nConsider this example:\n\n    rule falco:\n        input: whatever\n        output: whatever\n        log:\n            \"samples/{sample}/falco.log\"\n        threads:\n            config['falco']['threads']\n        params:\n            options=config['falco']['options'],\n            wkdir=config['falco']['working_directory']\n        wrapper:\n            \"falco/wrappers/falco\"\n\nYou config file will look like:\n\n    falco:\n        threads: 4\n        options=\"--verbose\"\n        working_directory: 'here'\n\n\n## Naming arguments of the different sections\n\nIn all sections (e.g., input, params), if there is only one input, no need to name it, otherwise, please do.\n\n    rule example1:\n        input:\n            \"test.bam\"\n        output:\n            \"test.sorted.bam\"\n        ...\n\nbut:\n\n    rule example1:\n        input:\n            \"test.bam\"\n        output:\n            bam=\"test.sorted.bam\"\n            bai=\"test.sorted.bam.bai\"\n        ...\n\n\n\n\n## Documentation\n\nEach wrapper should have a dedicated documentation explaining the input/output with a usage example. It should also document the expected configuration file.  The file must be formatted in markdown. It must contain a **Documentation** and **Example** sub sections. If a **Configuration** section is found, it is also added to the documentation. This **README.md**  file will be rendered automatically via a Sequana sphinx plugin. Consider the [fastqc](wrappers/fastqc/README.md) directory for a workable example rendered [here](https://sequana.readthedocs.io/en/master/wrappers.html#fastqc).\n\n\n\n## Faqs\n\n### adding a new wrapper in practice\n\nIn ./wrappers, add a new wrapper. Copy the existing fastqc wrapper for instance.\nEdit the wrapper.py and design a test/Snakefile example for testing. Since you are\na developer, you are problaby developping in a dedicated branch. Let us call it **dev**.\n\nIn the test/Snakefile, you should switch from the **main** to the **dev** in the wrapper path:\n\n    wrapper:\n        \"dev/wrappers/my_new_wrapper\"\n\nIn order to test your Snakefile, you first need to commit the wrapper.py. Then, execute the Snakefile:\n\n    snakemake -s Snakefile  -j 1 --wrapper-prefix git+file:///YOURPATH/sequana-wrappers/ -f -p\n\nIf it fails, edit and commit your wrapper.py and execute again until your Snakefile and wrappers are functional.\n\nOnce done, switch back the wrapper path to the **main** branch:\n\n    wrapper:\n        \"main/wrappers/my_new_wrapper\"\n\nTime to include the new wrapper in the continous integration. Go to the root of sequana-wrappers and add a functional test to the end of test.py. Then, test it:\n\n    pytest test.py -k my_new_wrapper -v\n\nYou are ready to push and create a pull-requests\n\n\n\n## Tagging\n\nYou may consider to add a tag. Our convention is to use a tag with the YEAR.MONTH.DAY\nwhere day and month do not include extra zeros. So you would have e.g.:\n\n    v23.11.11\n    v23.2.2\n\nbut not v23.02.02\n\nWe use annotated tags so the command is e.g.:\n\n    git tag -a v23.11.11\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsequana%2Fsequana-wrappers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsequana%2Fsequana-wrappers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsequana%2Fsequana-wrappers/lists"}