[med-svn] [Git][med-team/q2-cutadapt][master] 6 commits: Bump versioned Depends
Andreas Tille (@tille)
gitlab at salsa.debian.org
Thu Jan 12 20:00:10 GMT 2023
Andreas Tille pushed to branch master at Debian Med / q2-cutadapt
Commits:
4f05c8d4 by Andreas Tille at 2023-01-12T20:50:35+01:00
Bump versioned Depends
- - - - -
57f5d26c by Andreas Tille at 2023-01-12T20:51:14+01:00
New upstream version 2022.11.1
- - - - -
8ae00663 by Andreas Tille at 2023-01-12T20:51:14+01:00
routine-update: New upstream version
- - - - -
5843a19d by Andreas Tille at 2023-01-12T20:51:17+01:00
Update upstream source from tag 'upstream/2022.11.1'
Update to upstream version '2022.11.1'
with Debian dir c28457464d62108ec918d9b8a7471e9e004e063d
- - - - -
5751d5a5 by Andreas Tille at 2023-01-12T20:51:18+01:00
routine-update: Standards-Version: 4.6.2
- - - - -
77468381 by Andreas Tille at 2023-01-12T20:55:35+01:00
Upload to experimental
- - - - -
26 changed files:
- + .github/CONTRIBUTING.md
- + .github/ISSUE_TEMPLATE/1-user-need-help.md
- + .github/ISSUE_TEMPLATE/2-dev-need-help.md
- + .github/ISSUE_TEMPLATE/3-found-bug.md
- + .github/ISSUE_TEMPLATE/4-make-better.md
- + .github/ISSUE_TEMPLATE/5-make-new.md
- + .github/ISSUE_TEMPLATE/6-where-to-go.md
- + .github/SUPPORT.md
- + .github/pull_request_template.md
- + .github/rubric.png
- + .github/workflows/add-to-project-ci.yml
- + .github/workflows/ci.yml
- .gitignore
- debian/changelog
- debian/control
- + q2_cutadapt/_examples.py
- q2_cutadapt/_trim.py
- q2_cutadapt/_version.py
- q2_cutadapt/plugin_setup.py
- + q2_cutadapt/tests/data/single-end-quality/MANIFEST
- + q2_cutadapt/tests/data/single-end-quality/metadata.yml
- + q2_cutadapt/tests/data/single-end-quality/quality_sample_a_S01_L001_R1_001.fastq.gz
- + q2_cutadapt/tests/data/test_data_quality.fastq
- q2_cutadapt/tests/test_demux.py
- q2_cutadapt/tests/test_trim.py
- setup.py
Changes:
=====================================
.github/CONTRIBUTING.md
=====================================
@@ -0,0 +1,23 @@
+# Contributing to this project
+
+Thanks for thinking of us :heart: :tada: - we would love a helping hand!
+
+## I just have a question
+
+> Note: Please don't file an issue to ask a question. You'll get faster results
+> by using the resources below.
+
+### QIIME 2 Users
+
+Check out the [User Docs](https://docs.qiime2.org) - there are many tutorials,
+walkthroughs, and guides available. If you still need help, please visit us at
+the [QIIME 2 Forum](https://forum.qiime2.org/c/user-support).
+
+### QIIME 2 Developers
+
+Check out the [Developer Docs](https://dev.qiime2.org) - there are many
+tutorials, walkthroughs, and guides available. If you still need help, please
+visit us at the [QIIME 2 Forum](https://forum.qiime2.org/c/dev-discussion).
+
+This document is based heavily on the following:
+https://github.com/atom/atom/blob/master/CONTRIBUTING.md
=====================================
.github/ISSUE_TEMPLATE/1-user-need-help.md
=====================================
@@ -0,0 +1,14 @@
+---
+name: I am a user and I need help with QIIME 2...
+about: I am using QIIME 2 and have a question or am experiencing a problem
+
+---
+
+Have you had a chance to check out the docs?
+https://docs.qiime2.org
+There are many tutorials, walkthroughs, and guides available.
+
+If you still need help, please visit:
+https://forum.qiime2.org/c/user-support
+
+Help requests filed here will not be answered.
=====================================
.github/ISSUE_TEMPLATE/2-dev-need-help.md
=====================================
@@ -0,0 +1,12 @@
+---
+name: I am a developer and I need help with QIIME 2...
+about: I am developing a QIIME 2 plugin or interface and have a question or a problem
+
+---
+
+Have you had a chance to check out the developer docs?
+https://dev.qiime2.org
+There are many tutorials, walkthroughs, and guides available.
+
+If you still need help, please visit:
+https://forum.qiime2.org/c/dev-discussion
=====================================
.github/ISSUE_TEMPLATE/3-found-bug.md
=====================================
@@ -0,0 +1,36 @@
+---
+name: I am a developer and I found a bug...
+about: I am a developer and I found a bug that I can describe
+
+---
+
+**Bug Description**
+A clear and concise description of what the bug is.
+
+**Steps to reproduce the behavior**
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**Screenshots**
+If applicable, add screenshots to help explain your problem.
+
+**Computation Environment**
+- OS: [e.g. macOS High Sierra]
+- QIIME 2 Release [e.g. 2018.6]
+
+**Questions**
+1. An enumerated list with any questions about the problem here.
+2. If not applicable, please delete this section.
+
+**Comments**
+1. An enumerated list with any other context or comments about the problem here.
+2. If not applicable, please delete this section.
+
+**References**
+1. An enumerated list of links to relevant references, including forum posts, stack overflow, etc.
+2. If not applicable, please delete this section.
=====================================
.github/ISSUE_TEMPLATE/4-make-better.md
=====================================
@@ -0,0 +1,26 @@
+---
+name: I am a developer and I have an idea for an improvement...
+about: I am a developer and I have an idea for an improvement to existing functionality
+
+---
+
+**Improvement Description**
+A clear and concise description of what the improvement is.
+
+**Current Behavior**
+Please provide a brief description of the current behavior.
+
+**Proposed Behavior**
+Please provide a brief description of the proposed behavior.
+
+**Questions**
+1. An enumerated list of questions related to the proposal.
+2. If not applicable, please delete this section.
+
+**Comments**
+1. An enumerated list of comments related to the proposal that don't fit anywhere else.
+2. If not applicable, please delete this section.
+
+**References**
+1. An enumerated list of links to relevant references, including forum posts, stack overflow, etc.
+2. If not applicable, please delete this section.
=====================================
.github/ISSUE_TEMPLATE/5-make-new.md
=====================================
@@ -0,0 +1,26 @@
+---
+name: I am a developer and I have an idea for a new feature...
+about: I am a developer and I have an idea for new functionality
+
+---
+
+**Addition Description**
+A clear and concise description of what the addition is.
+
+**Current Behavior**
+Please provide a brief description of the current behavior, if applicable.
+
+**Proposed Behavior**
+Please provide a brief description of the proposed behavior.
+
+**Questions**
+1. An enumerated list of questions related to the proposal.
+2. If not applicable, please delete this section.
+
+**Comments**
+1. An enumerated list of comments related to the proposal that don't fit anywhere else.
+2. If not applicable, please delete this section.
+
+**References**
+1. An enumerated list of links to relevant references, including forum posts, stack overflow, etc.
+2. If not applicable, please delete this section.
=====================================
.github/ISSUE_TEMPLATE/6-where-to-go.md
=====================================
@@ -0,0 +1,147 @@
+---
+name: I don't know where to file my issue...
+about: I am a developer and I don't know which repo to file this in
+
+---
+
+The repos within the QIIME 2 GitHub Organization are listed below, with a brief description about the repo.
+
+Sorted alphabetically by repo name.
+
+- The CI automation engine that builds and distributes QIIME 2
+ https://github.com/qiime2/busywork/issues
+
+- A Concourse resource for working with conda
+ https://github.com/qiime2/conda-channel-resource/issues
+
+- Web app for vanity URLs for QIIME 2 data assets
+ https://github.com/qiime2/data.qiime2.org/issues
+
+- The Developer Documentation
+ https://github.com/qiime2/dev-docs/issues
+
+- A discourse plugin for handling queued/unqueued topics
+ https://github.com/qiime2/discourse-unhandled-tagger/issues
+
+- The User Documentation
+ https://github.com/qiime2/docs/issues
+
+- Rendered QIIME 2 environment files for conda
+ https://github.com/qiime2/environment-files/issues
+
+- Google Sheets Add-On for validating tabular data
+ https://github.com/qiime2/Keemei/issues
+
+- A docker image for linux-based busywork workers
+ https://github.com/qiime2/linux-worker-docker/issues
+
+- Official project logos
+ https://github.com/qiime2/logos/issues
+
+- The q2-alignment plugin
+ https://github.com/qiime2/q2-alignment/issues
+
+- The q2-composition plugin
+ https://github.com/qiime2/q2-composition/issues
+
+- The q2-cutadapt plugin
+ https://github.com/qiime2/q2-cutadapt/issues
+
+- The q2-dada2 plugin
+ https://github.com/qiime2/q2-dada2/issues
+
+- The q2-deblur plugin
+ https://github.com/qiime2/q2-deblur/issues
+
+- The q2-demux plugin
+ https://github.com/qiime2/q2-demux/issues
+
+- The q2-diversity plugin
+ https://github.com/qiime2/q2-diversity/issues
+
+- The q2-diversity-lib plugin
+ https://github.com/qiime2/q2-diversity-lib/issues
+
+- The q2-emperor plugin
+ https://github.com/qiime2/q2-emperor/issues
+
+- The q2-feature-classifier plugin
+ https://github.com/qiime2/q2-feature-classifier/issues
+
+- The q2-feature-table plugin
+ https://github.com/qiime2/q2-feature-table/issues
+
+- The q2-fragment-insertion plugin
+ https://github.com/qiime2/q2-fragment-insertion/issues
+
+- The q2-gneiss plugin
+ https://github.com/qiime2/q2-gneiss/issues
+
+- The q2-longitudinal plugin
+ https://github.com/qiime2/q2-longitudinal/issues
+
+- The q2-metadata plugin
+ https://github.com/qiime2/q2-metadata/issues
+
+- The q2-phylogeny plugin
+ https://github.com/qiime2/q2-phylogeny/issues
+
+- The q2-quality-control plugin
+ https://github.com/qiime2/q2-quality-control/issues
+
+- The q2-quality-filter plugin
+ https://github.com/qiime2/q2-quality-filter/issues
+
+- The q2-sample-classifier plugin
+ https://github.com/qiime2/q2-sample-classifier/issues
+
+- The q2-shogun plugin
+ https://github.com/qiime2/q2-shogun/issues
+
+- The q2-taxa plugin
+ https://github.com/qiime2/q2-taxa/issues
+
+- The q2-types plugin
+ https://github.com/qiime2/q2-types/issues
+
+- The q2-vsearch plugin
+ https://github.com/qiime2/q2-vsearch/issues
+
+- The CLI interface
+ https://github.com/qiime2/q2cli/issues
+
+- The prototype CWL interface
+ https://github.com/qiime2/q2cwl/issues
+
+- The prototype Galaxy interface
+ https://github.com/qiime2/q2galaxy/issues
+
+- An internal tool for ensuring header text and copyrights are present
+ https://github.com/qiime2/q2lint/issues
+
+- The prototype GUI interface
+ https://github.com/qiime2/q2studio/issues
+
+- A base template for use in official QIIME 2 plugins
+ https://github.com/qiime2/q2templates/issues
+
+- The read-only web interface at view.qiime2.org
+ https://github.com/qiime2/q2view/issues
+
+- The QIIME 2 homepage at qiime2.org
+ https://github.com/qiime2/qiime2.github.io/issues
+
+- The QIIME 2 framework
+ https://github.com/qiime2/qiime2/issues
+
+- Centralized templates for repo assets
+ https://github.com/qiime2/template-repo/issues
+
+- Scripts for building QIIME 2 VMs
+ https://github.com/qiime2/vm-playbooks/issues
+
+- Scripts for building QIIME 2 workshop clusters
+ https://github.com/qiime2/workshop-playbooks/issues
+
+- The web app that runs workshops.qiime2.org
+ https://github.com/qiime2/workshops.qiime2.org/issues
=====================================
.github/SUPPORT.md
=====================================
@@ -0,0 +1,112 @@
+# QIIME 2 Users
+
+Check out the [User Docs](https://docs.qiime2.org) - there are many tutorials,
+walkthroughs, and guides available. If you still need help, please visit us at
+the [QIIME 2 Forum](https://forum.qiime2.org/c/user-support).
+
+# QIIME 2 Developers
+
+Check out the [Developer Docs](https://dev.qiime2.org) - there are many
+tutorials, walkthroughs, and guides available. If you still need help, please
+visit us at the [QIIME 2 Forum](https://forum.qiime2.org/c/dev-discussion).
+
+# General Bug/Issue Triage Discussion
+
+![rubric](./rubric.png?raw=true)
+
+# Projects/Repositories in the QIIME 2 GitHub Organization
+
+Sorted alphabetically by repo name.
+
+- [busywork](https://github.com/qiime2/busywork/issues)
+ | The CI automation engine that builds and distributes QIIME 2
+- [conda-channel-resource](https://github.com/qiime2/conda-channel-resource/issues)
+ | A Concourse resource for working with conda
+- [data.qiime2.org](https://github.com/qiime2/data.qiime2.org/issues)
+ | Web app for vanity URLs for QIIME 2 data assets
+- [dev-docs](https://github.com/qiime2/dev-docs/issues)
+ | The Developer Documentation
+- [discourse-unhandled-tagger](https://github.com/qiime2/discourse-unhandled-tagger/issues)
+ | A discourse plugin for handling queued/unqueued topics
+- [docs](https://github.com/qiime2/docs/issues)
+ | The User Documentation
+- [environment-files](https://github.com/qiime2/environment-files/issues)
+ | Rendered QIIME 2 environment files for conda
+- [Keemei](https://github.com/qiime2/Keemei/issues)
+ | Google Sheets Add-On for validating tabular data
+- [linux-worker-docker](https://github.com/qiime2/linux-worker-docker/issues)
+ | A docker image for linux-based busywork workers
+- [logos](https://github.com/qiime2/logos/issues)
+ | Official project logos
+- [q2-alignment](https://github.com/qiime2/q2-alignment/issues)
+ | The q2-alignment plugin
+- [q2-composition](https://github.com/qiime2/q2-composition/issues)
+ | The q2-composition plugin
+- [q2-cutadapt](https://github.com/qiime2/q2-cutadapt/issues)
+ | The q2-cutadapt plugin
+- [q2-dada2](https://github.com/qiime2/q2-dada2/issues)
+ | The q2-dada2 plugin
+- [q2-deblur](https://github.com/qiime2/q2-deblur/issues)
+ | The q2-deblur plugin
+- [q2-demux](https://github.com/qiime2/q2-demux/issues)
+ | The q2-demux plugin
+- [q2-diversity](https://github.com/qiime2/q2-diversity/issues)
+ | The q2-diversity plugin
+- [q2-diversity-lib](https://github.com/qiime2/q2-diversity-lib/issues)
+ | The q2-diversity-lib plugin
+- [q2-emperor](https://github.com/qiime2/q2-emperor/issues)
+ | The q2-emperor plugin
+- [q2-feature-classifier](https://github.com/qiime2/q2-feature-classifier/issues)
+ | The q2-feature-classifier plugin
+- [q2-feature-table](https://github.com/qiime2/q2-feature-table/issues)
+ | The q2-feature-table plugin
+- [q2-fragment-insertion](https://github.com/qiime2/q2-fragment-insertion/issues)
+ | The q2-fragment-insertion plugin
+- [q2-gneiss](https://github.com/qiime2/q2-gneiss/issues)
+ | The q2-gneiss plugin
+- [q2-longitudinal](https://github.com/qiime2/q2-longitudinal/issues)
+ | The q2-longitudinal plugin
+- [q2-metadata](https://github.com/qiime2/q2-metadata/issues)
+ | The q2-metadata plugin
+- [q2-phylogeny](https://github.com/qiime2/q2-phylogeny/issues)
+ | The q2-phylogeny plugin
+- [q2-quality-control](https://github.com/qiime2/q2-quality-control/issues)
+ | The q2-quality-control plugin
+- [q2-quality-filter](https://github.com/qiime2/q2-quality-filter/issues)
+ | The q2-quality-filter plugin
+- [q2-sample-classifier](https://github.com/qiime2/q2-sample-classifier/issues)
+ | The q2-sample-classifier plugin
+- [q2-shogun](https://github.com/qiime2/q2-shogun/issues)
+ | The q2-shogun plugin
+- [q2-taxa](https://github.com/qiime2/q2-taxa/issues)
+ | The q2-taxa plugin
+- [q2-types](https://github.com/qiime2/q2-types/issues)
+ | The q2-types plugin
+- [q2-vsearch](https://github.com/qiime2/q2-vsearch/issues)
+ | The q2-vsearch plugin
+- [q2cli](https://github.com/qiime2/q2cli/issues)
+ | The CLI interface
+- [q2cwl](https://github.com/qiime2/q2cwl/issues)
+ | The prototype CWL interface
+- [q2galaxy](https://github.com/qiime2/q2galaxy/issues)
+ | The prototype Galaxy interface
+- [q2lint](https://github.com/qiime2/q2lint/issues)
+ | An internal tool for ensuring header text and copyrights are present
+- [q2studio](https://github.com/qiime2/q2studio/issues)
+ | The prototype GUI interface
+- [q2templates](https://github.com/qiime2/q2templates/issues)
+ | A base template for use in official QIIME 2 plugins
+- [q2view](https://github.com/qiime2/q2view/issues)
+ | The read-only web interface at view.qiime2.org
+- [qiime2.github.io](https://github.com/qiime2/qiime2.github.io/issues)
+ | The QIIME 2 homepage at qiime2.org
+- [qiime2](https://github.com/qiime2/qiime2/issues)
+ | The QIIME 2 framework
+- [template-repo](https://github.com/qiime2/template-repo/issues)
+ | Centralized templates for repo assets
+- [vm-playbooks](https://github.com/qiime2/vm-playbooks/issues)
+ | Scripts for building QIIME 2 VMs
+- [workshop-playbooks](https://github.com/qiime2/workshop-playbooks/issues)
+ | Scripts for building QIIME 2 workshop clusters
+- [workshops.qiime2.org](https://github.com/qiime2/workshops.qiime2.org/issues)
+ | The web app that runs workshops.qiime2.org
=====================================
.github/pull_request_template.md
=====================================
@@ -0,0 +1,11 @@
+Brief summary of the Pull Request, including any issues it may fix using the GitHub closing syntax:
+
+https://help.github.com/articles/closing-issues-using-keywords/
+
+Also, include any co-authors or contributors using the GitHub coauthor tag:
+
+https://help.github.com/articles/creating-a-commit-with-multiple-authors/
+
+---
+
+Include any questions for reviewers, screenshots, sample outputs, etc.
=====================================
.github/rubric.png
=====================================
Binary files /dev/null and b/.github/rubric.png differ
=====================================
.github/workflows/add-to-project-ci.yml
=====================================
@@ -0,0 +1,21 @@
+name: Add new issues and PRs to triage project board
+
+on:
+ issues:
+ types:
+ - opened
+ pull_request_target:
+ types:
+ - opened
+
+jobs:
+ add-to-project:
+ name: Add issue to project
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/add-to-project at v0.3.0
+ with:
+ project-url: https://github.com/orgs/qiime2/projects/36
+ github-token: ${{ secrets.ADD_TO_PROJECT_PAT }}
+ labeled: skip-triage
+ label-operator: NOT
=====================================
.github/workflows/ci.yml
=====================================
@@ -0,0 +1,55 @@
+# This file is automatically generated by busywork.qiime2.org and
+# template-repos - any manual edits made to this file will be erased when
+# busywork performs maintenance updates.
+
+name: ci
+
+on:
+ pull_request:
+ push:
+ branches:
+ - master
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - name: checkout source
+ uses: actions/checkout at v2
+
+ - name: set up python 3.8
+ uses: actions/setup-python at v1
+ with:
+ python-version: 3.8
+
+ - name: install dependencies
+ run: python -m pip install --upgrade pip
+
+ - name: lint
+ run: |
+ pip install -q https://github.com/qiime2/q2lint/archive/master.zip
+ q2lint
+ pip install -q flake8
+ flake8
+
+ build-and-test:
+ needs: lint
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - name: checkout source
+ uses: actions/checkout at v2
+ with:
+ fetch-depth: 0
+
+ - name: set up git repo for versioneer
+ run: git fetch --depth=1 origin +refs/tags/*:refs/tags/*
+
+ - uses: qiime2/action-library-packaging at alpha1
+ with:
+ package-name: q2-cutadapt
+ build-target: dev
+ additional-tests: py.test --pyargs q2_cutadapt
+ library-token: ${{ secrets.LIBRARY_TOKEN }}
=====================================
.gitignore
=====================================
@@ -68,3 +68,4 @@ target/
*~
.DS_store
+.history/
\ No newline at end of file
=====================================
debian/changelog
=====================================
@@ -1,3 +1,12 @@
+q2-cutadapt (2022.11.1-1) experimental; urgency=medium
+
+ * Team upload.
+ * New upstream version
+ * Bump versioned Depends
+ * Standards-Version: 4.6.2 (routine-update)
+
+ -- Andreas Tille <tille at debian.org> Thu, 12 Jan 2023 20:51:38 +0100
+
q2-cutadapt (2022.8.0-1) unstable; urgency=medium
* Team Upload.
=====================================
debian/control
=====================================
@@ -10,9 +10,9 @@ Build-Depends: debhelper-compat (= 13),
python3-pytest-cov,
python3-pandas,
cutadapt (>= 2.3),
- qiime (>= 2022.8.1),
- q2-types (>= 2022.8.0)
-Standards-Version: 4.6.1
+ qiime (>= 2022.11.1),
+ q2-types (>= 2022.11.1)
+Standards-Version: 4.6.2
Vcs-Browser: https://salsa.debian.org/med-team/q2-cutadapt
Vcs-Git: https://salsa.debian.org/med-team/q2-cutadapt.git
Homepage: https://qiime2.org/
@@ -27,8 +27,8 @@ Depends: ${shlibs:Depends},
python3-pandas,
cutadapt,
pigz,
- qiime (>= 2022.8.1),
- q2-types (>= 2022.8.0)
+ qiime (>= 2022.11.1),
+ q2-types (>= 2022.11.1)
Description: QIIME 2 plugin to work with adapters in sequence data
QIIME 2 is a powerful, extensible, and decentralized microbiome analysis
package with a focus on data and analysis transparency. QIIME 2 enables
=====================================
q2_cutadapt/_examples.py
=====================================
@@ -0,0 +1,53 @@
+# ----------------------------------------------------------------------------
+# Copyright (c) 2022, QIIME 2 development team.
+#
+# Distributed under the terms of the Modified BSD License.
+#
+# The full license is in the file LICENSE, distributed with this software.
+# ----------------------------------------------------------------------------
+
+
+def cutadapt_demux_single(use):
+ sequence_url = ('https://data.qiime2.org/usage-examples/other/'
+ 'single_multiplexed.qza')
+ metadata_url = ('https://data.qiime2.org/usage-examples/other/barcodes')
+
+ seqs = use.init_artifact_from_url('seqs', sequence_url)
+ md = use.init_metadata_from_url('md', metadata_url)
+ barcodes = use.get_metadata_column('barcodes', 'BarcodeSequence', md)
+
+ per_sample_sequences, untrimmed_sequences = use.action(
+
+ use.UsageAction(plugin_id='cutadapt', action_id='demux_single'),
+ use.UsageInputs(seqs=seqs, barcodes=barcodes),
+ use.UsageOutputNames(per_sample_sequences='per_sample_sequences',
+ untrimmed_sequences='untrimmed_sequences')
+ )
+ per_sample_sequences.assert_output_type('SampleData[SequencesWithQuality]')
+ untrimmed_sequences.assert_output_type(
+ 'MultiplexedSingleEndBarcodeInSequence'
+ )
+
+
+def cutadapt_demux_paired(use):
+ sequence_url = ('https://data.qiime2.org/usage-examples/other/'
+ 'paired_multiplexed.qza')
+ metadata_url = ('https://data.qiime2.org/usage-examples/other/'
+ 'paired_metadata.tsv')
+
+ seqs = use.init_artifact_from_url('seqs', sequence_url)
+ md = use.init_metadata_from_url('md', metadata_url)
+ forward_barcodes = use.get_metadata_column('barcodes',
+ 'barcode-sequence',
+ md)
+ per_sample_sequences, untrimmed_sequences = use.action(
+ use.UsageAction(plugin_id='cutadapt', action_id='demux_paired'),
+ use.UsageInputs(seqs=seqs, forward_barcodes=forward_barcodes,),
+ use.UsageOutputNames(per_sample_sequences='per_sample_sequences',
+ untrimmed_sequences='untrimmed_sequences')
+ )
+ per_sample_sequences.assert_output_type(
+ 'SampleData[PairedEndSequencesWithQuality]')
+ untrimmed_sequences.assert_output_type(
+ 'MultiplexedPairedEndBarcodeInSequence'
+ )
=====================================
q2_cutadapt/_trim.py
=====================================
@@ -7,7 +7,6 @@
# ----------------------------------------------------------------------------
import os
-
import subprocess
import pandas as pd
@@ -46,6 +45,11 @@ _trim_defaults = {
'match_adapter_wildcards': True,
'minimum_length': 1,
'discard_untrimmed': False,
+ 'max_expected_errors': None,
+ 'max_n': None,
+ 'quality_cutoff_5end': 0,
+ 'quality_cutoff_3end': 0,
+ 'quality_base': 33,
}
@@ -67,6 +71,15 @@ def _build_trim_command(f_read, r_read, trimmed_seqs,
'match_adapter_wildcards'],
minimum_length=_trim_defaults['minimum_length'],
discard_untrimmed=_trim_defaults['discard_untrimmed'],
+ max_expected_errors=_trim_defaults[
+ 'max_expected_errors'],
+ max_n=_trim_defaults[
+ 'max_n'],
+ quality_cutoff_5end=_trim_defaults[
+ 'quality_cutoff_5end'],
+ quality_cutoff_3end=_trim_defaults[
+ 'quality_cutoff_3end'],
+ quality_base=_trim_defaults['quality_base']
):
cmd = [
'cutadapt',
@@ -75,6 +88,8 @@ def _build_trim_command(f_read, r_read, trimmed_seqs,
'--times', str(times),
'--overlap', str(overlap),
'--minimum-length', str(minimum_length),
+ '-q', ','.join([str(quality_cutoff_5end), str(quality_cutoff_3end)]),
+ '--quality-base', str(quality_base),
'-o', str(trimmed_seqs.path / os.path.basename(f_read)),
]
@@ -114,7 +129,10 @@ def _build_trim_command(f_read, r_read, trimmed_seqs,
if r_read is not None:
cmd += [r_read]
-
+ if max_expected_errors is not None:
+ cmd += ['--max-expected-errors', str(max_expected_errors)]
+ if max_n is not None:
+ cmd += ['--max-n', str(max_n)]
return cmd
@@ -134,7 +152,16 @@ def trim_single(demultiplexed_sequences:
bool = _trim_defaults['match_adapter_wildcards'],
minimum_length: int = _trim_defaults['minimum_length'],
discard_untrimmed:
- bool = _trim_defaults['discard_untrimmed']) -> \
+ bool = _trim_defaults['discard_untrimmed'],
+ max_expected_errors:
+ float = _trim_defaults['max_expected_errors'],
+ max_n:
+ float = _trim_defaults['max_n'],
+ quality_cutoff_5end:
+ int = _trim_defaults['quality_cutoff_5end'],
+ quality_cutoff_3end:
+ int = _trim_defaults['quality_cutoff_3end'],
+ quality_base: int = _trim_defaults['quality_base']) -> \
CasavaOneEightSingleLanePerSampleDirFmt:
trimmed_sequences = CasavaOneEightSingleLanePerSampleDirFmt()
cmds = []
@@ -145,7 +172,9 @@ def trim_single(demultiplexed_sequences:
anywhere, None, None, None, error_rate,
indels, times, overlap, match_read_wildcards,
match_adapter_wildcards, minimum_length,
- discard_untrimmed)
+ discard_untrimmed, max_expected_errors,
+ max_n, quality_cutoff_5end,
+ quality_cutoff_3end, quality_base)
cmds.append(cmd)
run_commands(cmds)
@@ -171,7 +200,16 @@ def trim_paired(demultiplexed_sequences:
bool = _trim_defaults['match_adapter_wildcards'],
minimum_length: int = _trim_defaults['minimum_length'],
discard_untrimmed:
- bool = _trim_defaults['discard_untrimmed']) -> \
+ bool = _trim_defaults['discard_untrimmed'],
+ max_expected_errors:
+ float = _trim_defaults['max_expected_errors'],
+ max_n:
+ float = _trim_defaults['max_n'],
+ quality_cutoff_5end:
+ int = _trim_defaults['quality_cutoff_5end'],
+ quality_cutoff_3end:
+ int = _trim_defaults['quality_cutoff_3end'],
+ quality_base: int = _trim_defaults['quality_base']) -> \
CasavaOneEightSingleLanePerSampleDirFmt:
trimmed_sequences = CasavaOneEightSingleLanePerSampleDirFmt()
cmds = []
@@ -183,7 +221,9 @@ def trim_paired(demultiplexed_sequences:
error_rate, indels, times, overlap,
match_read_wildcards,
match_adapter_wildcards, minimum_length,
- discard_untrimmed)
+ discard_untrimmed, max_expected_errors,
+ max_n, quality_cutoff_5end,
+ quality_cutoff_3end, quality_base)
cmds.append(cmd)
run_commands(cmds)
=====================================
q2_cutadapt/_version.py
=====================================
@@ -23,9 +23,9 @@ def get_keywords():
# setup.py/versioneer.py will grep for the variable names, so they must
# each be defined on a line of their own. _version.py will just call
# get_keywords().
- git_refnames = " (tag: 2022.8.0)"
- git_full = "6708ba6ea29f8d839364b365047ff6929628b30d"
- git_date = "2022-08-23 17:11:57 +0000"
+ git_refnames = " (HEAD -> master, tag: 2022.11.1)"
+ git_full = "09874d44b1fcbdfe317eef04944e8593d43b03a0"
+ git_date = "2022-12-21 22:17:04 +0000"
keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
return keywords
=====================================
q2_cutadapt/plugin_setup.py
=====================================
@@ -32,6 +32,8 @@ import q2_cutadapt
import q2_cutadapt._demux
import q2_cutadapt._trim
+import q2_cutadapt._examples as ex
+
plugin = Plugin(
name='cutadapt',
@@ -64,6 +66,11 @@ plugin.methods.register_function(
'match_adapter_wildcards': Bool,
'minimum_length': Int % Range(1, None),
'discard_untrimmed': Bool,
+ 'max_expected_errors': Float % Range(0, None),
+ 'max_n': Float % Range(0, None),
+ 'quality_cutoff_3end': Int % Range(0, None),
+ 'quality_cutoff_5end': Int % Range(0, None),
+ 'quality_base': Int % Range(0, None),
},
outputs=[
('trimmed_sequences', SampleData[SequencesWithQuality]),
@@ -109,6 +116,16 @@ plugin.methods.register_function(
'because that value produces empty sequence '
'records.',
'discard_untrimmed': 'Discard reads in which no adapter was found.',
+ 'max_expected_errors': 'Discard reads that exceed maximum expected '
+ 'erroneous nucleotides.',
+ 'max_n': 'Discard reads with more than COUNT N bases. '
+ 'If COUNT_or_FRACTION is a number between 0 and 1, '
+ 'it is interpreted as a fraction of the read length.',
+ 'quality_cutoff_3end': 'Trim nucleotides with Phred score quality '
+ 'lower than threshold from 3 prime end.',
+ 'quality_cutoff_5end': 'Trim nucleotides with Phred score quality '
+ 'lower than threshold from 5 prime end.',
+ 'quality_base': 'How the Phred score is encoded (33 or 64).',
},
output_descriptions={
'trimmed_sequences': 'The resulting trimmed sequences.',
@@ -143,6 +160,11 @@ plugin.methods.register_function(
'match_adapter_wildcards': Bool,
'minimum_length': Int % Range(1, None),
'discard_untrimmed': Bool,
+ 'max_expected_errors': Float % Range(0, None),
+ 'max_n': Float % Range(0, None),
+ 'quality_cutoff_3end': Int % Range(0, None),
+ 'quality_cutoff_5end': Int % Range(0, None),
+ 'quality_base': Int % Range(0, None),
},
outputs=[
('trimmed_sequences', SampleData[PairedEndSequencesWithQuality]),
@@ -210,6 +232,16 @@ plugin.methods.register_function(
'because that value produces empty sequence '
'records.',
'discard_untrimmed': 'Discard reads in which no adapter was found.',
+ 'max_expected_errors': 'Discard reads that exceed maximum expected '
+ 'erroneous nucleotides.',
+ 'max_n': 'Discard reads with more than COUNT N bases. '
+ 'If COUNT_or_FRACTION is a number between 0 and 1, '
+ 'it is interpreted as a fraction of the read length.',
+ 'quality_cutoff_3end': 'Trim nucleotides with Phred score quality '
+ 'lower than threshold from 3 prime end.',
+ 'quality_cutoff_5end': 'Trim nucleotides with Phred score quality '
+ 'lower than threshold from 5 prime end.',
+ 'quality_base': 'How the Phred score is encoded (33 or 64).',
},
output_descriptions={
'trimmed_sequences': 'The resulting trimmed sequences.',
@@ -270,6 +302,8 @@ plugin.methods.register_function(
'sample ids). Barcodes are expected to be located within the '
'sequence data (versus the header, or a separate barcode '
'file).',
+ examples={'demux_single': ex.cutadapt_demux_single
+ },
)
plugin.methods.register_function(
@@ -325,4 +359,6 @@ plugin.methods.register_function(
'sample ids). Barcodes are expected to be located within the '
'sequence data (versus the header, or a separate barcode '
'file).',
+ examples={'paired': ex.cutadapt_demux_paired,
+ },
)
=====================================
q2_cutadapt/tests/data/single-end-quality/MANIFEST
=====================================
@@ -0,0 +1,5 @@
+sample-id,filename,direction
+# direction is not meaningful in this file as these
+# data may be derived from forward, reverse, or
+# joined reads
+sample_a,quality_sample_a_S01_L001_R1_001.fastq.gz,forward
\ No newline at end of file
=====================================
q2_cutadapt/tests/data/single-end-quality/metadata.yml
=====================================
@@ -0,0 +1 @@
+{phred-offset: 33}
=====================================
q2_cutadapt/tests/data/single-end-quality/quality_sample_a_S01_L001_R1_001.fastq.gz
=====================================
Binary files /dev/null and b/q2_cutadapt/tests/data/single-end-quality/quality_sample_a_S01_L001_R1_001.fastq.gz differ
=====================================
q2_cutadapt/tests/data/test_data_quality.fastq
=====================================
@@ -0,0 +1,40 @@
+ at M01069:52:000000000-A3GR9:1:1101:15758:1548 1:N:0:1
+TGGATTTCAACCTCGATATCTTCACAGACGCTTGCAATATACTCAGCGAGTTTCTCAGCTTCTTCTTCGGGCNCGTCCTCTCCGTACNNAATGGTGNCGATTTCNTCTTCTTCCCCGATCATTTCATCNNGCAGCANNTTCGCCGNACTT
++
+###############GGGGGGGHHHGFHHG2AA2FFBGGHGHFHH3GFEEEGHHHFGHF5GHHHHHHGH?EE#???FFGHGHHGHHG##BBF?FFD#??1FFFF#???/?GGHHHCEGGCGFFGDHHH##?<//FA##?/?<FG?#/?FF
+ at M01069:52:000000000-A3GR9:1:1101:15707:1555 1:N:0:1
+AGCGGGGCCCGGACTGGTTTCTCTTTCCGAGTTGCTCAGATAAAGAGGCAGACAAGACAATGATGAAGCGCGNAGGGATACCGTTGCNNGGATTGGNTCTGACANGCTGCGCCAGCATGAGCAATCTGNNCAGCCANGCGGACGANGGGCT
++
+??AA?32>ADBBEGGGFGGGFFHFHHFHGGGFGHHFHHGHAFGF55FEGGGGEEFFGFFFHFHBFGGHGGGG#??FFEC?GH/??EF##???/FGA#/??FFHH#??/?FCCGGCGHD1FFHFHFHDD##><<<CF###############
+ at M01069:52:000000000-A3GR9:1:1101:16067:1560 1:N:0:1
+ACTGCCACGCTTCATTGCTGTGGAAGGCCCCATCGGCGTCGGCAAGACGACCCTGGCCCGGCGCCTGGCGGANACCTTCAACTACGANNTGCTACTNGAGCAGGNCGAAGCCAATCCGTTCCTGGAGCNCTTTTACNGCGCGCCCNGCC
++
+#####################################################################################################################################################
+ at M01069:52:000000000-A3GR9:1:1101:16945:1562 1:N:0:1
+CACCCTATGTCATAGGGCGTTTTCTAATATATAGGAATAATTATCAATATTTTCAAATAATATTGACAGCTTNAACATCTATGGATANNATTTACTTAAAATTTAACAGATTGGTTGGTGCTCATGATNATATTGGATAATAGCANTCAA
++
+BBBBBAFFFFFFDAGGC4AAFGFHHFHHFFHFGGFBGFHHHGFHHHHHHHFDGGHHHFFFHGHHFHFG3GFG#1AABEFG5DGFHHH##B?BFEGGFBBBGHHHFHHFHFHHHHHHGG??3FGDHHBG#??FFGFHEGDFFHGFB#?/?F
+ at M01069:52:000000000-A3GR9:1:1101:15050:1563 1:N:0:1
+TGATTAACGTCAGCGGGGTTTTTTTATGACTTGATCACAATGGCCTGGCTGCCCATCTGCTTCCAGGCTTTTNCAAAGTCAGACCGANNTGTTTTTNTGTTTTTNTAGCCGTAAGGATCATTGACGTANACATAATNGTGATCATNACCGG
++
+CCCCCFFFCFBBGGGGGGEGGGGGGHHHHHGHHCHHHHHHFHCHHHGFHHGFGGHHHHFHHHHHGHGHHHHH#?FFFGFHHFHHHGE##???FGHG#??FFGHG#=?FFFGFDGHGHHHCGHFEFDGH#.>FGFHH#<<CEGHFF#<<ECE
+ at M01069:52:000000000-A3GR9:1:1101:14104:1566 1:N:0:1
+GCGCGAAATCAAAACGCACTTGTCCGGCATAGGCGGAAAACAGCTGGAGCCGTATATGAGCCGCACTGTGTCNGAACTTGAACATACNNTCGTTCAGAAGGAAACAGAGAAAAAAACGCCTGAGGAAANAAGCGCCNAGCCCCGTNAGCA
++
+BBABBBBBBFFFGGGEEA2AA3F3FA2EAA33BFEEE0AGB1CFCGH1BGEE111BE4BBBG//EE/BBFFE#?/?F/FF333B3BG##??/F?B1FB11F0F0F0BCH01100/<C@?-0<00.<0G#...<<A@#..<.=CC:#.::.
+ at M01069:52:000000000-A3GR9:1:1101:14211:1570 1:N:0:1
+CTGATAAGCGTTCAATCTTCCGCTCTGCTTCATCCAGTACATATTGCGCTAACTCTAACTGCTCCTTCGCTTNATCTACACCTGCGANNTTCAACAACTCACCATTTATCTTTTCGATATCCTGTGTCNCCCTTGATCGTTCATTNCTAGC
++
+BBBBB5DFFDABGCGG5GFGGGFGGGHHHHHFHFHFHFFGHHFHHGH?EEGEHHHHHHGGFHHHHHHHHGDH#BBFFCFHHHHFHGC##??B?FGGHFHHHHHHHEBDGGGHHHHGGHEGHGHHHHHF#???F?GDFHG0GHFHH#??CGG
+ at M01069:52:000000000-A3GR9:1:1101:16602:1572 1:N:0:1
+ATTGACAAATGGAATGGACGGCGGCTTACAGGATATGCGCGAAGGTTTTTCAGCGCCTGTGATTACAGAAATNGCCTTTTCAATTTTGNTGATATCCGCTGCTGCAAGAGCGACGTAATATCCGTCTCNGGCGCCTGTAATGAGGCTTGGC
++
+AA?A3DFFBFFF4FFA4BFAAE?EEEGHGHHCCGBFHH?EEEEEFE3 at FEG3FD1EEFHF34FF43FGEFCG#/??FEFG4B4FFEG4#??/?FHGH?C///?1FCGBHHHC@/?@/FFB1FFDFGF0#..<<CC?C0=DGBDDH.;/@E/
+ at M01069:52:000000000-A3GR9:1:1101:16151:1577 1:N:0:1
+TGTTCGATGCCCTCAGTGGTGAGCAGGTGCTGGTGACCGGCTGGGTCCAGGGGCACCGGTTGCGGGAGTATCNGGATGCGCATCCGGANCAGGCCGCCCCGTTGCTGAATCGCCTGTTCGCCAGTTATNTGCAGCAGGTGACCCGGTTCGG
++
+AA>AAABFFBFFBG4FDGFGGGHHG4GBGGHHHHGHHGGGGGGGGHHFHHGFCGCGGGGGGGGGCGCEE3GH#1?FFGECEEFGHGGG#??FFGGGG?CGGGHGGFHHHHHHGFGHGHHGGGGGFHHH#<<CGGGHHE;CGHHHGGGGGAF
+ at M01069:52:000000000-A3GR9:1:1101:15436:1581 1:N:0:1
+GACAGCAATTTCTTCGGATTCGTAGCGTAATCCCATACGTCAAAGGCAAAATCCTTCACTTTACCTGCTGCGNCTTTTACCGTGTTTANAACTGCGTTTTTCGCGCTCGTTACTGTATCGGTCGCTTTTTCGAAAAGCGATTTCTTTTTTG
++
+3AAABBFBFFFFGGGCCEEEGGHHGGGA2AFGHGHHHFHFGDCHHHFGHF2FFHHHHEFHHHHFHHHGHHHE#?BFFGHBGEFEGHFD#BBFFFFGA>EAFCEGGGGGGGGAEDHFGHHGCCECGEHGHHHC/0/<F0C..GEHFFFFGA@
=====================================
q2_cutadapt/tests/test_demux.py
=====================================
@@ -741,5 +741,12 @@ class TestDemuxUtilsPairedEnd(TestPluginBase):
self.assertTrue(reverse.path.is_file())
+class TestExamples(TestPluginBase):
+ package = 'q2_cutadapt.tests'
+
+ def test_examples(self):
+ self.execute_examples()
+
+
if __name__ == '__main__':
unittest.main()
=====================================
q2_cutadapt/tests/test_trim.py
=====================================
@@ -77,6 +77,111 @@ class TestTrimSingle(TestPluginBase):
for record in itertools.zip_longest(*[obs_fh] * 4):
self.assertTrue(record[0] != empty_seq_id)
+ # Test quality param runs as expected
+ # Test q5
+ def test_quality_paramq5(self):
+ demuxed_art = Artifact.import_data(
+ 'SampleData[SequencesWithQuality]',
+ self.get_data_path('single-end-quality'))
+ sel_q_seq_id = ['@HWI-EAS440_0386:1:31:9235:14704#0/1',
+ '@HWI-EAS440_0386:1:32:4292:6388#0/1']
+
+ q5 = 20
+ with redirected_stdio(stdout=os.devnull):
+ obs_art, = self.plugin.methods['trim_single'](
+ demuxed_art, quality_cutoff_5end=q5)
+ obs = obs_art.view(SingleLanePerSampleSingleEndFastqDirFmt)
+ for _, obs_fp in obs.sequences.iter_views(FastqGzFormat):
+ with gzip.open(str(obs_fp), 'rt') as obs_fh:
+ for record in itertools.zip_longest(*[obs_fh] * 4):
+ if record[0].strip() in sel_q_seq_id:
+ self.assertTrue(len(record[1].strip()) == 132)
+ else:
+ self.assertTrue(len(record[1].strip()) == 152)
+
+ # Test q3
+ def test_quality_paramq3(self):
+ demuxed_art = Artifact.import_data(
+ 'SampleData[SequencesWithQuality]',
+ self.get_data_path('single-end-quality'))
+ q3_seq_id_not_trim = ['@HWI-EAS440_0386:1:65:6657:15399#0/1',
+ '@HWI-EAS440_0386:1:70:7591:17599#0/1',
+ '@HWI-EAS440_0386:1:72:7520:2633#0/1']
+ q3 = 10
+
+ with redirected_stdio(stdout=os.devnull):
+ obs_art, = self.plugin.methods['trim_single'](
+ demuxed_art, quality_cutoff_3end=q3)
+ obs = obs_art.view(SingleLanePerSampleSingleEndFastqDirFmt)
+ for _, obs_fp in obs.sequences.iter_views(FastqGzFormat):
+ with gzip.open(str(obs_fp), 'rt') as obs_fh:
+ for record in itertools.zip_longest(*[obs_fh] * 4):
+ if record[0].strip() in q3_seq_id_not_trim:
+ self.assertTrue(len(record[1].strip()) == 152)
+ else:
+ self.assertTrue(len(record[1].strip()) == 132)
+
+ # Test q5 and q3
+ def test_quality_paramq5q3(self):
+ demuxed_art = Artifact.import_data(
+ 'SampleData[SequencesWithQuality]',
+ self.get_data_path('single-end-quality'))
+ q5_seq_id = ['@HWI-EAS440_0386:1:31:9235:14704#0/1',
+ '@HWI-EAS440_0386:1:32:4292:6388#0/1']
+ q3_seq_id_not_trim = ['@HWI-EAS440_0386:1:65:6657:15399#0/1',
+ '@HWI-EAS440_0386:1:70:7591:17599#0/1',
+ '@HWI-EAS440_0386:1:72:7520:2633#0/1']
+ q5 = 20
+ q3 = 10
+
+ with redirected_stdio(stdout=os.devnull):
+ obs_art, = self.plugin.methods['trim_single'](
+ demuxed_art, quality_cutoff_5end=q5,
+ quality_cutoff_3end=q3)
+ obs = obs_art.view(SingleLanePerSampleSingleEndFastqDirFmt)
+ for _, obs_fp in obs.sequences.iter_views(FastqGzFormat):
+ with gzip.open(str(obs_fp), 'rt') as obs_fh:
+ for record in itertools.zip_longest(*[obs_fh] * 4):
+ if record[0].strip() in q5_seq_id:
+ self.assertTrue(len(record[1].strip()) == 112)
+ elif record[0].strip() in q3_seq_id_not_trim:
+ self.assertTrue(len(record[1].strip()) == 152)
+ else:
+ self.assertTrue(len(record[1].strip()) == 132)
+
+ # Test max_expected_errors
+ def test_quality_param_maxee(self):
+ demuxed_art = Artifact.import_data(
+ 'SampleData[SequencesWithQuality]',
+ self.get_data_path('single-end-quality'))
+ maxee_seq_id = '@HWI-EAS440_0386:1:70:7591:17599#0/1'
+ max_expected_errors = 1
+ with redirected_stdio(stdout=os.devnull):
+ obs_art, = self.plugin.methods['trim_single'](
+ demuxed_art,
+ max_expected_errors=max_expected_errors)
+ obs = obs_art.view(SingleLanePerSampleSingleEndFastqDirFmt)
+ for _, obs_fp in obs.sequences.iter_views(FastqGzFormat):
+ with gzip.open(str(obs_fp), 'rt') as obs_fh:
+ for record in itertools.zip_longest(*[obs_fh] * 4):
+ self.assertTrue(record[0].strip() != maxee_seq_id)
+
+ # Test max_n
+ def test_quality_param_maxn(self):
+ demuxed_art = Artifact.import_data(
+ 'SampleData[SequencesWithQuality]',
+ self.get_data_path('single-end-quality'))
+ maxn_seq_id = '@HWI-EAS440_0386:1:72:15133:12639#0/1'
+ max_n = 0
+ with redirected_stdio(stdout=os.devnull):
+ obs_art, = self.plugin.methods['trim_single'](
+ demuxed_art, max_n=max_n)
+ obs = obs_art.view(SingleLanePerSampleSingleEndFastqDirFmt)
+ for _, obs_fp in obs.sequences.iter_views(FastqGzFormat):
+ with gzip.open(str(obs_fp), 'rt') as obs_fh:
+ for record in itertools.zip_longest(*[obs_fh] * 4):
+ self.assertTrue(record[0].strip() != maxn_seq_id)
+
class TestTrimPaired(TestPluginBase):
package = 'q2_cutadapt.tests'
@@ -174,7 +279,10 @@ class TestTrimUtilsSingle(TestPluginBase):
match_read_wildcards=True,
match_adapter_wildcards=False,
minimum_length=2,
- discard_untrimmed=True)
+ discard_untrimmed=True,
+ max_expected_errors=1,
+ max_n=0,
+ quality_base=33)
obs = ' '.join(obs)
self.assertTrue('-o %s' % str(self.trimmed_seqs.path / fwd[0])
@@ -191,7 +299,10 @@ class TestTrimUtilsSingle(TestPluginBase):
self.assertTrue('--no-match-adapter-wildcards' in obs)
self.assertTrue('--minimum-length 2' in obs)
self.assertTrue('--discard-untrimmed' in obs)
-
+ self.assertTrue('--max-expected-errors 1' in obs)
+ self.assertTrue('--max-n 0' in obs)
+ self.assertTrue('-q 0,0' in obs)
+ self.assertTrue('--quality-base 33' in obs)
self.assertTrue(str(self.demux_seqs) in obs)
def test_build_trim_command_multiple_adapters(self):
@@ -254,7 +365,10 @@ class TestTrimUtilsPaired(TestPluginBase):
match_read_wildcards=True,
match_adapter_wildcards=False,
minimum_length=2,
- discard_untrimmed=True)
+ discard_untrimmed=True,
+ max_expected_errors=1,
+ max_n=0,
+ quality_base=33)
obs = ' '.join(obs)
self.assertTrue('-o %s' % str(self.trimmed_seqs.path / fwd[0])
@@ -276,6 +390,10 @@ class TestTrimUtilsPaired(TestPluginBase):
self.assertTrue('--no-match-adapter-wildcards' in obs)
self.assertTrue('--minimum-length 2' in obs)
self.assertTrue('--discard-untrimmed' in obs)
+ self.assertTrue('--max-expected-errors 1' in obs)
+ self.assertTrue('--max-n 0' in obs)
+ self.assertTrue('-q 0,0' in obs)
+ self.assertTrue('--quality-base 33' in obs)
self.assertTrue(str(self.demux_seqs) in obs)
=====================================
setup.py
=====================================
@@ -30,6 +30,7 @@ setup(
'data/*',
'data/single-end/*',
'data/paired-end/*',
+ 'data/single-end-quality/*',
'data/paired-end-unordered/*',
'data/mixed-orientation/*',
],
View it on GitLab: https://salsa.debian.org/med-team/q2-cutadapt/-/compare/bdf810c27959c7f10c2f6afcfcde26ce2e537cfc...774683810d5dba148102058dd6a7eeaa177eeb41
--
View it on GitLab: https://salsa.debian.org/med-team/q2-cutadapt/-/compare/bdf810c27959c7f10c2f6afcfcde26ce2e537cfc...774683810d5dba148102058dd6a7eeaa177eeb41
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20230112/8c7b241b/attachment-0001.htm>
More information about the debian-med-commit
mailing list