[med-svn] [Git][med-team/q2-taxa][master] 5 commits: routine-update: New upstream version
Étienne Mollier (@emollier)
gitlab at salsa.debian.org
Sun Aug 20 16:41:11 BST 2023
Étienne Mollier pushed to branch master at Debian Med / q2-taxa
Commits:
447d05c7 by Étienne Mollier at 2023-08-20T17:21:22+02:00
routine-update: New upstream version
- - - - -
4c7c7bab by Étienne Mollier at 2023-08-20T17:21:23+02:00
New upstream version 2023.7.0+dfsg
- - - - -
27cf6e79 by Étienne Mollier at 2023-08-20T17:21:23+02:00
Update upstream source from tag 'upstream/2023.7.0+dfsg'
Update to upstream version '2023.7.0+dfsg'
with Debian dir 173c3faf07bdaa3d4f6e6acc676e07d37c830a56
- - - - -
fb2cebc1 by Étienne Mollier at 2023-08-20T17:30:47+02:00
0002-skip-tests-needing-internet.patch: new.
- - - - -
0d4798f9 by Étienne Mollier at 2023-08-20T17:40:20+02:00
ready for upload to unstable.
- - - - -
21 changed files:
- + .github/workflows/ci-dev.yaml
- − .github/workflows/ci.yml
- + .github/workflows/join-release.yaml
- + .github/workflows/tag-release.yaml
- LICENSE
- ci/recipe/meta.yaml
- debian/changelog
- + debian/patches/0002-skip-tests-needing-internet.patch
- debian/patches/series
- q2_taxa/__init__.py
- q2_taxa/_examples.py
- q2_taxa/_method.py
- q2_taxa/_util.py
- q2_taxa/_version.py
- q2_taxa/_visualizer.py
- q2_taxa/plugin_setup.py
- q2_taxa/tests/__init__.py
- q2_taxa/tests/test_methods.py
- q2_taxa/tests/test_plugin_setup.py
- q2_taxa/tests/test_visualizer.py
- setup.py
Changes:
=====================================
.github/workflows/ci-dev.yaml
=====================================
@@ -0,0 +1,12 @@
+# Example of workflow trigger for calling workflow (the client).
+name: ci-dev
+on:
+ pull_request:
+ branches: ["dev"]
+ push:
+ branches: ["dev"]
+jobs:
+ ci:
+ uses: qiime2/distributions/.github/workflows/lib-ci-dev.yaml at dev
+ with:
+ distro: core
\ No newline at end of file
=====================================
.github/workflows/ci.yml deleted
=====================================
@@ -1,55 +0,0 @@
-# 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-taxa
- build-target: dev
- additional-tests: py.test --pyargs q2_taxa
- library-token: ${{ secrets.LIBRARY_TOKEN }}
=====================================
.github/workflows/join-release.yaml
=====================================
@@ -0,0 +1,6 @@
+name: join-release
+on:
+ workflow_dispatch: {}
+jobs:
+ release:
+ uses: qiime2/distributions/.github/workflows/lib-join-release.yaml at dev
\ No newline at end of file
=====================================
.github/workflows/tag-release.yaml
=====================================
@@ -0,0 +1,7 @@
+name: tag-release
+on:
+ push:
+ branches: ["Release-*"]
+jobs:
+ tag:
+ uses: qiime2/distributions/.github/workflows/lib-tag-release.yaml at dev
\ No newline at end of file
=====================================
LICENSE
=====================================
@@ -1,6 +1,6 @@
BSD 3-Clause License
-Copyright (c) 2016-2022, QIIME 2 development team.
+Copyright (c) 2016-2023, QIIME 2 development team.
All rights reserved.
Redistribution and use in source and binary forms, with or without
=====================================
ci/recipe/meta.yaml
=====================================
@@ -30,6 +30,9 @@ requirements:
- q2-types {{ qiime2_epoch }}.*
test:
+ commands:
+ - py.test --pyargs q2_taxa
+
requires:
- qiime2 >={{ qiime2 }}
- q2templates >={{ q2templates }}
=====================================
debian/changelog
=====================================
@@ -1,3 +1,11 @@
+q2-taxa (2023.7.0+dfsg-1) unstable; urgency=medium
+
+ * Team upload.
+ * New upstream version 2023.7.0+dfsg (Closes: #1044061)
+ * 0002-skip-tests-needing-internet.patch: new.
+
+ -- Étienne Mollier <emollier at debian.org> Sun, 20 Aug 2023 17:36:59 +0200
+
q2-taxa (2022.11.1+dfsg-2) unstable; urgency=medium
* Team upload
=====================================
debian/patches/0002-skip-tests-needing-internet.patch
=====================================
@@ -0,0 +1,24 @@
+Description: skip test needing Internet.
+Author: Étienne Mollier <emollier at debian.org>
+Forwarded: not-needed
+Last-Update: 2023-08-20
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- q2-taxa.orig/q2_taxa/tests/test_methods.py
++++ q2-taxa/q2_taxa/tests/test_methods.py
+@@ -7,6 +7,7 @@
+ # ----------------------------------------------------------------------------
+
+ import unittest
++import pytest
+
+ import numpy as np
+ import biom
+@@ -876,6 +877,7 @@
+ filter_seqs(seqs, taxonomy, include='bb')
+
+
++ at pytest.mark.skip(reason='Test requires Internet.')
+ class TestUsageExamples(TestPluginBase):
+ package = 'q2_taxa.tests'
+
=====================================
debian/patches/series
=====================================
@@ -1 +1,2 @@
0001-make-compatible-with-webpack5.patch
+0002-skip-tests-needing-internet.patch
=====================================
q2_taxa/__init__.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
=====================================
q2_taxa/_examples.py
=====================================
@@ -1,20 +1,18 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, 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.
# ----------------------------------------------------------------------------
-import qiime2
-
table_url = ('https://data.qiime2.org/usage-examples/'
'moving-pictures/gut-table.qza')
taxonomy_url = ('https://data.qiime2.org/usage-examples/'
'moving-pictures/taxonomy.qza')
-metadata_url = (f'https://data.qiime2.org/{qiime2.__release__}/tutorials/'
- 'moving-pictures/sample_metadata.tsv')
+metadata_url = ('https://data.qiime2.org/usage-examples/'
+ 'moving-pictures/sample-metadata.tsv')
def collapse_example(use):
=====================================
q2_taxa/_method.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
=====================================
q2_taxa/_util.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
@@ -40,7 +40,11 @@ def _extract_to_level(taxonomy, table):
# Collapse table at specified level
for level in range(1, max_obs_lvl + 1):
collapsed_table = _collapse_table(table, taxonomy, level, max_obs_lvl)
- as_df = collapsed_table.transpose().to_dataframe(dense=True)
+ as_df = _biom_to_df(collapsed_table)
collapsed_tables.append(as_df)
return collapsed_tables
+
+
+def _biom_to_df(table):
+ return table.transpose().to_dataframe(dense=True)
=====================================
q2_taxa/_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 = " (HEAD -> master, tag: 2022.11.1)"
- git_full = "d3288c4e0882df166b7f40205a83d3cc50318609"
- git_date = "2022-12-21 21:39:27 +0000"
+ git_refnames = " (tag: 2023.7.0, Release-2023.7)"
+ git_full = "85122a0f9596c79b371fb1dab359363fd59b1a5d"
+ git_date = "2023-08-17 18:50:58 +0000"
keywords = {"refnames": git_refnames, "full": git_full, "date": git_date}
return keywords
=====================================
q2_taxa/_visualizer.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
@@ -17,14 +17,14 @@ import q2templates
from qiime2 import Metadata
-from ._util import _extract_to_level
+from ._util import _extract_to_level, _biom_to_df
TEMPLATES = pkg_resources.resource_filename('q2_taxa', 'assets')
-def barplot(output_dir: str, table: biom.Table, taxonomy: pd.Series,
- metadata: Metadata = None) -> None:
+def barplot(output_dir: str, table: biom.Table, taxonomy: pd.Series = None,
+ metadata: Metadata = None, level_delimiter: str = None) -> None:
if metadata is None:
metadata = Metadata(
@@ -35,10 +35,22 @@ def barplot(output_dir: str, table: biom.Table, taxonomy: pd.Series,
raise ValueError('Sample IDs found in the table are missing in the '
f'metadata: {ids_not_in_metadata!r}.')
+ collapse = True
+ if taxonomy is None:
+ if level_delimiter is None:
+ collapse = False
+ else:
+ _ids = table.ids('observation')
+ ranks = [r.replace(level_delimiter, ';') for r in _ids]
+ taxonomy = pd.Series(ranks, index=_ids)
+
num_metadata_cols = metadata.column_count
metadata = metadata.to_dataframe()
jsonp_files, csv_files = [], []
- collapsed_tables = _extract_to_level(taxonomy, table)
+ if collapse:
+ collapsed_tables = _extract_to_level(taxonomy, table)
+ else:
+ collapsed_tables = [_biom_to_df(table)]
for level, df in enumerate(collapsed_tables, 1):
# Stash column labels before manipulating dataframe
=====================================
q2_taxa/plugin_setup.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
@@ -11,8 +11,7 @@ import qiime2.plugin
import q2_taxa
from q2_types.feature_data import FeatureData, Taxonomy, Sequence
-from q2_types.feature_table import FeatureTable, Frequency
-
+from q2_types.feature_table import FeatureTable, Frequency, PresenceAbsence
from . import barplot, collapse, filter_table, filter_seqs
import q2_taxa._examples as ex
@@ -180,17 +179,25 @@ plugin.visualizers.register_function(
function=barplot,
inputs={
'taxonomy': FeatureData[Taxonomy],
- 'table': FeatureTable[Frequency]
+ 'table': FeatureTable[Frequency | PresenceAbsence]
},
- parameters={'metadata': qiime2.plugin.Metadata},
+ parameters={'metadata': qiime2.plugin.Metadata,
+ 'level_delimiter': qiime2.plugin.Str},
input_descriptions={
'taxonomy': ('Taxonomic annotations for features in the provided '
'feature table. All features in the feature table must '
'have a corresponding taxonomic annotation. Taxonomic '
'annotations that are not present in the feature table '
- 'will be ignored.'),
+ 'will be ignored. If no taxonomy is provided, the '
+ 'feature IDs will be used as labels.'),
'table': 'Feature table to visualize at various taxonomic levels.'},
- parameter_descriptions={'metadata': 'The sample metadata.'},
+ parameter_descriptions={
+ 'metadata': 'The sample metadata.',
+ 'level_delimiter': 'Attempt to parse hierarchical taxonomic '
+ 'information from feature IDs by separating '
+ 'levels with this character. This parameter '
+ 'is ignored if a taxonomy is provided as input.'
+ },
name='Visualize taxonomy with an interactive bar plot',
description='This visualizer produces an interactive barplot visualization'
' of taxonomies. Interactive features include multi-level '
=====================================
q2_taxa/tests/__init__.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
=====================================
q2_taxa/tests/test_methods.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
=====================================
q2_taxa/tests/test_plugin_setup.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
=====================================
q2_taxa/tests/test_visualizer.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
@@ -15,7 +15,7 @@ import numpy as np
import pandas as pd
import qiime2
-from q2_taxa import barplot
+from q2_taxa import barplot, collapse
class BarplotTests(unittest.TestCase):
@@ -27,14 +27,14 @@ class BarplotTests(unittest.TestCase):
['feat1', 'feat2']).transpose()
self.taxonomy = pd.Series(['a; b; c', 'a; b; d'],
index=['feat1', 'feat2'])
-
- def test_barplot(self):
- metadata = qiime2.Metadata(
+ self.metadata = qiime2.Metadata(
pd.DataFrame({'val1': ['1.0', '2.0', '3.0', '4.0']},
index=pd.Index(['A', 'B', 'C', 'D'], name='id')))
+ def test_barplot(self):
+
with tempfile.TemporaryDirectory() as output_dir:
- barplot(output_dir, self.table, self.taxonomy, metadata)
+ barplot(output_dir, self.table, self.taxonomy, self.metadata)
index_fp = os.path.join(output_dir, 'index.html')
self.assertTrue(os.path.exists(index_fp))
self.assertTrue("src='level-1.jsonp?callback=load_data'" in
@@ -76,3 +76,24 @@ class BarplotTests(unittest.TestCase):
csv_lvl3_fp = os.path.join(output_dir, 'level-3.csv')
self.assertTrue(os.path.exists(csv_lvl3_fp))
self.assertTrue('val1' not in open(csv_lvl3_fp).read())
+
+ def test_barplot_no_taxonomy(self):
+ with tempfile.TemporaryDirectory() as output_dir:
+ barplot(output_dir, self.table, metadata=self.metadata)
+ index_fp = os.path.join(output_dir, 'index.html')
+ self.assertTrue(os.path.exists(index_fp))
+ self.assertTrue("src='level-1.jsonp?callback=load_data'" in
+ open(index_fp).read())
+ csv_lvl1_fp = os.path.join(output_dir, 'level-1.csv')
+ self.assertTrue(os.path.exists(csv_lvl1_fp))
+ self.assertTrue('val1' in open(csv_lvl1_fp).read())
+
+ def test_barplot_collapsed_table(self):
+ with tempfile.TemporaryDirectory() as output_dir:
+ collapsed_table = collapse(self.table, self.taxonomy, 3)
+ barplot(output_dir, collapsed_table, level_delimiter=';')
+ # if level three tables exist, the taxonomy was parsed
+ # correctly from the collapsed table.
+ csv_lvl3_fp = os.path.join(output_dir, 'level-3.csv')
+ self.assertTrue(os.path.exists(csv_lvl3_fp))
+ self.assertTrue('val1' not in open(csv_lvl3_fp).read())
=====================================
setup.py
=====================================
@@ -1,5 +1,5 @@
# ----------------------------------------------------------------------------
-# Copyright (c) 2016-2022, QIIME 2 development team.
+# Copyright (c) 2016-2023, QIIME 2 development team.
#
# Distributed under the terms of the Modified BSD License.
#
View it on GitLab: https://salsa.debian.org/med-team/q2-taxa/-/compare/41b22fb9b612917a1dd9927bad9ec3383ac08cf7...0d4798f9e493948d5e6cc5a5726011a30c76376d
--
View it on GitLab: https://salsa.debian.org/med-team/q2-taxa/-/compare/41b22fb9b612917a1dd9927bad9ec3383ac08cf7...0d4798f9e493948d5e6cc5a5726011a30c76376d
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/20230820/e9800e0e/attachment-0001.htm>
More information about the debian-med-commit
mailing list