[med-svn] [Git][med-team/python-dnaio][master] 7 commits: New upstream version 0.4.3

Nilesh Patra gitlab at salsa.debian.org
Sun Nov 8 07:51:07 GMT 2020



Nilesh Patra pushed to branch master at Debian Med / python-dnaio


Commits:
f3055552 by Nilesh Patra at 2020-11-08T13:16:36+05:30
New upstream version 0.4.3
- - - - -
a1d0cd67 by Nilesh Patra at 2020-11-08T13:16:36+05:30
routine-update: New upstream version

- - - - -
c7221d91 by Nilesh Patra at 2020-11-08T13:16:37+05:30
Update upstream source from tag 'upstream/0.4.3'

Update to upstream version '0.4.3'
with Debian dir 0cd5fa37daaeeae9703cfd3100be5f334edb71c4
- - - - -
03bfad40 by Nilesh Patra at 2020-11-08T13:16:37+05:30
routine-update: debhelper-compat 13

- - - - -
23da0ea6 by Nilesh Patra at 2020-11-08T13:16:47+05:30
routine-update: Add salsa-ci file

- - - - -
02c36867 by Nilesh Patra at 2020-11-08T13:16:51+05:30
Set upstream metadata fields: Bug-Database, Bug-Submit, Repository, Repository-Browse.

Changes-By: lintian-brush
Fixes: lintian: upstream-metadata-missing-bug-tracking
See-also: https://lintian.debian.org/tags/upstream-metadata-missing-bug-tracking.html
Fixes: lintian: upstream-metadata-missing-repository
See-also: https://lintian.debian.org/tags/upstream-metadata-missing-repository.html

- - - - -
ea207028 by Nilesh Patra at 2020-11-08T13:16:52+05:30
routine-update: Ready to upload to unstable

- - - - -


14 changed files:

- .travis.yml
- README.md
- buildwheels.sh
- debian/changelog
- debian/control
- + debian/salsa-ci.yml
- debian/upstream/metadata
- setup.py
- src/dnaio/__init__.py
- src/dnaio/readers.py
- src/dnaio/writers.py
- tests/test_internal.py
- tests/test_open.py
- tox.ini


Changes:

=====================================
.travis.yml
=====================================
@@ -7,7 +7,6 @@ cache:
     - $HOME/.cache/pip
 
 python:
-  - "3.4"
   - "3.5"
   - "3.6"
   - "3.7"


=====================================
README.md
=====================================
@@ -4,7 +4,7 @@
 
 # dnaio parses FASTQ and FASTA
 
-`dnaio` is a Python 3 library for fast parsing of FASTQ and also FASTA files. The code was previously part of the
+`dnaio` is a Python 3.5+ library for fast parsing of FASTQ and also FASTA files. The code was previously part of the
 [Cutadapt](https://cutadapt.readthedocs.io/) tool and has been improved since it has been split out.
 
 


=====================================
buildwheels.sh
=====================================
@@ -1,19 +1,30 @@
 #!/bin/bash
 #
-# Build manylinux1 wheels. Based on the example at
+# Build manylinux wheels. Based on the example at
 # <https://github.com/pypa/python-manylinux-demo>
 #
-# For interactive tests:
-#   docker run -it -v $(pwd):/io quay.io/pypa/manylinux1_x86_64 /bin/bash
+# It is best to run this in a fresh clone of the repository!
+#
+# Run this within the repository root:
+#   ./buildwheels.sh
+#
+# The wheels will be put into the dist/ subdirectory.
 
 set -xeuo pipefail
 
+manylinux=quay.io/pypa/manylinux2010_x86_64
+
 # For convenience, if this script is called from outside of a docker container,
 # it starts a container and runs itself inside of it.
 if ! grep -q docker /proc/1/cgroup; then
   # We are not inside a container
-  docker pull quay.io/pypa/manylinux1_x86_64
-  exec docker run --rm -v $(pwd):/io quay.io/pypa/manylinux1_x86_64 /io/$0
+  docker pull ${manylinux}
+  exec docker run --rm -v $(pwd):/io ${manylinux} /io/$0
+fi
+
+if ! test -d /io/dist; then
+  mkdir /io/dist
+  chown --reference=/io/setup.py /io/dist
 fi
 
 # Strip binaries (copied from multibuild)
@@ -21,21 +32,14 @@ STRIP_FLAGS=${STRIP_FLAGS:-"-Wl,-strip-all"}
 export CFLAGS="${CFLAGS:-$STRIP_FLAGS}"
 export CXXFLAGS="${CXXFLAGS:-$STRIP_FLAGS}"
 
-
-# We don’t support Python 2.7
-rm /opt/python/cp27*
-
-PYBINS="/opt/python/*/bin"
-HAS_CYTHON=0
-for PYBIN in ${PYBINS}; do
-    ${PYBIN}/pip install Cython
-#    ${PYBIN}/pip install -r /io/requirements.txt
-    ${PYBIN}/pip wheel /io/ -w wheelhouse/
+for PYBIN in /opt/python/cp3[5678]-*/bin; do
+    ${PYBIN}/pip wheel --no-deps /io/ -w wheelhouse/
 done
+ls wheelhouse/
 
 # Bundle external shared libraries into the wheels
-for whl in wheelhouse/dnaio-*.whl; do
-    auditwheel repair "$whl" -w repaired/
+for whl in wheelhouse/*.whl; do
+    auditwheel repair "$whl" --plat manylinux1_x86_64 -w repaired/
 done
 
 # Created files are owned by root, so fix permissions.


=====================================
debian/changelog
=====================================
@@ -1,3 +1,14 @@
+python-dnaio (0.4.3-1) unstable; urgency=medium
+
+  * Team upload.
+  * New upstream version
+  * debhelper-compat 13 (routine-update)
+  * Add salsa-ci file (routine-update)
+  * Set upstream metadata fields: Bug-Database, Bug-Submit, Repository,
+    Repository-Browse.
+
+ -- Nilesh Patra <npatra974 at gmail.com>  Sun, 08 Nov 2020 13:16:52 +0530
+
 python-dnaio (0.4.2-1) unstable; urgency=medium
 
   * Team upload.


=====================================
debian/control
=====================================
@@ -3,7 +3,7 @@ Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.
 Uploaders: Liubov Chuprikova <chuprikovalv at gmail.com>
 Section: python
 Priority: optional
-Build-Depends: debhelper-compat (= 12),
+Build-Depends: debhelper-compat (= 13),
                dh-python,
                python3-all-dev,
                python3-setuptools,


=====================================
debian/salsa-ci.yml
=====================================
@@ -0,0 +1,4 @@
+---
+include:
+  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/salsa-ci.yml
+  - https://salsa.debian.org/salsa-ci-team/pipeline/raw/master/pipeline-jobs.yml


=====================================
debian/upstream/metadata
=====================================
@@ -1,4 +1,6 @@
-Repository: https://github.com/marcelm/dnaio
+Bug-Database: https://github.com/marcelm/dnaio/issues
+Bug-Submit: https://github.com/marcelm/dnaio/issues/new
+Repository: https://github.com/marcelm/dnaio.git
 Registry:
  - Name: conda:bioconda
    Entry: dnaio
@@ -6,3 +8,4 @@ Registry:
    Entry: NA
  - Name: OMICtools
    Entry: NA
+Repository-Browse: https://github.com/marcelm/dnaio


=====================================
setup.py
=====================================
@@ -4,8 +4,8 @@ from setuptools import setup, Extension, find_packages
 from distutils.command.sdist import sdist as _sdist
 from distutils.command.build_ext import build_ext as _build_ext
 
-if sys.version_info[:2] < (3, 4):
-    sys.stdout.write('Python 3.4 or later is required\n')
+if sys.version_info[:2] < (3, 5):
+    sys.stdout.write('Python 3.5 or later is required\n')
     sys.exit(1)
 
 
@@ -75,9 +75,9 @@ setup(
     ext_modules=extensions,
     cmdclass={'build_ext': BuildExt, 'sdist': SDist},
     install_requires=['xopen>=0.8.2'],
-    python_requires='>=3.4',
+    python_requires='>=3.5',
     classifiers=[
-            "Development Status :: 4 - Beta",
+            "Development Status :: 5 - Production/Stable",
             "Intended Audience :: Science/Research",
             "License :: OSI Approved :: MIT License",
             "Natural Language :: English",


=====================================
src/dnaio/__init__.py
=====================================
@@ -128,6 +128,21 @@ def _detect_format_from_name(name):
     return None
 
 
+def _is_path(obj):
+    """
+    Return whether the given object looks like a path (str, pathlib.Path or pathlib2.Path)
+    """
+    # pytest uses pathlib2.Path objects on Python 3.5 for its tmp_path fixture.
+    # On Python 3.6+, this function can be replaced with isinstance(obj, os.PathLike)
+    import sys
+    if "pathlib2" in sys.modules:
+        import pathlib2
+        path_classes = (str, pathlib.Path, pathlib2.Path)
+    else:
+        path_classes = (str, pathlib.Path)
+    return isinstance(obj, path_classes)
+
+
 def _open_single(file, opener, *, fileformat=None, mode="r", qualities=None):
     """
     Open a single sequence file. See description of open() above.
@@ -135,7 +150,7 @@ def _open_single(file, opener, *, fileformat=None, mode="r", qualities=None):
     if mode not in ("r", "w", "a"):
         raise ValueError("Mode must be 'r', 'w' or 'a'")
 
-    if isinstance(file, (str, pathlib.Path)):  # TODO Use os.PathLike in Python 3.6+
+    if _is_path(file):
         path = fspath(file)
         file = opener(path, mode + "b")
         close_file = True
@@ -200,7 +215,8 @@ def _detect_format_from_content(file):
     """
     if file.seekable():
         first_char = file.read(1)
-        file.seek(-1, 1)
+        if file.tell() > 0:
+            file.seek(-1, 1)
     else:
         first_char = file.peek(1)[0:1]
     formats = {
@@ -228,6 +244,9 @@ class PairedSequenceReader:
             self._close = stack.pop_all().close
         self.delivers_qualities = self.reader1.delivers_qualities
 
+    def __repr__(self):
+        return "PairedSequenceReader(file1={}, file2={})".format(self.reader1, self.reader2)
+
     def __iter__(self):
         """
         Iterate over the paired reads. Each item is a pair of Sequence objects.
@@ -279,6 +298,9 @@ class InterleavedSequenceReader:
         self.reader = _open_single(file, opener=opener, fileformat=fileformat)
         self.delivers_qualities = self.reader.delivers_qualities
 
+    def __repr__(self):
+        return "InterleavedSequenceReader({})".format(self.reader)
+
     def __iter__(self):
         it = iter(self.reader)
         for r1 in it:
@@ -317,6 +339,9 @@ class PairedSequenceWriter:
                     file2, opener=opener, fileformat=fileformat, mode=self._mode, qualities=qualities))
             self._close = stack.pop_all().close
 
+    def __repr__(self):
+        return "{}({}, {})".format(self.__class__.__name__, self._writer1, self._writer2)
+
     def write(self, read1, read2):
         self._writer1.write(read1)
         self._writer2.write(read2)
@@ -347,6 +372,9 @@ class InterleavedSequenceWriter:
         self._writer = _open_single(
             file, opener=opener, fileformat=fileformat, mode=self._mode, qualities=qualities)
 
+    def __repr__(self):
+        return "{}({})".format(self.__class__.__name__, self._writer)
+
     def write(self, read1, read2):
         self._writer.write(read1)
         self._writer.write(read2)


=====================================
src/dnaio/readers.py
=====================================
@@ -30,6 +30,9 @@ class BinaryFileReader:
             self._close_on_exit = True
         self._file = file
 
+    def __repr__(self):
+        return "{}({!r})".format(self.__class__.__name__, getattr(self._file, "name", self._file))
+
     def close(self):
         if self._close_on_exit and self._file is not None:
             self._file.close()


=====================================
src/dnaio/writers.py
=====================================
@@ -10,6 +10,9 @@ class FileWriter:
         else:
             self._close_on_exit = bool(_close_file)
 
+    def __repr__(self):
+        return "{}({!r})".format(self.__class__.__name__, getattr(self._file, "name", self._file))
+
     def close(self):
         if self._close_on_exit:
             self._file.close()
@@ -36,6 +39,9 @@ class FastaWriter(FileWriter):
         super().__init__(file, opener=opener, _close_file=_close_file)
         self.line_length = line_length if line_length != 0 else None
 
+    def __repr__(self):
+        return "FastaWriter({!r})".format(getattr(self._file, "name", self._file))
+
     def write(self, name_or_record, sequence=None):
         """Write an entry to the the FASTA file.
 


=====================================
tests/test_internal.py
=====================================
@@ -324,8 +324,6 @@ class TestInterleavedReader:
         ]
         with InterleavedSequenceReader("tests/data/interleaved.fastq") as isr:
             reads = list(isr)
-        for (r1, r2), (e1, e2) in zip(reads, expected):
-            print(r1, r2, e1, e2)
 
         assert reads == expected
         with dnaio.open("tests/data/interleaved.fastq", interleaved=True) as f:


=====================================
tests/test_open.py
=====================================
@@ -49,6 +49,20 @@ def test_version():
     _ = dnaio.__version__
 
 
+def test_open_nonexistent(tmp_path):
+    with pytest.raises(FileNotFoundError):
+        with dnaio.open(tmp_path / "nonexistent"):
+            pass
+
+
+def test_open_empty_file_with_unrecognized_extension(tmp_path):
+    path = tmp_path / "unrecognized-extension.tmp"
+    path.touch()
+    with dnaio.open(path) as f:
+        records = list(f)
+    assert records == []
+
+
 def test_read(fileformat, extension):
     with dnaio.open("tests/data/simple." + fileformat + extension) as f:
         records = list(f)


=====================================
tox.ini
=====================================
@@ -1,5 +1,5 @@
 [tox]
-envlist = flake8,py34,py35,py36,py37,py38
+envlist = flake8,py35,py36,py37,py38
 
 [testenv]
 deps =



View it on GitLab: https://salsa.debian.org/med-team/python-dnaio/-/compare/351a8370a891d0a21add3d0786644731b5d0e6ef...ea2070280126b12a9e6b2454c12b9a7dc5a5eb9a

-- 
View it on GitLab: https://salsa.debian.org/med-team/python-dnaio/-/compare/351a8370a891d0a21add3d0786644731b5d0e6ef...ea2070280126b12a9e6b2454c12b9a7dc5a5eb9a
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/20201108/c7179cf5/attachment-0001.html>


More information about the debian-med-commit mailing list