[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