[med-svn] [Git][med-team/poretools][master] 8 commits: Apply patch by Steve Langasek <steve.langasek at canonical.com>

Andreas Tille gitlab at salsa.debian.org
Thu Aug 15 22:57:52 BST 2019



Andreas Tille pushed to branch master at Debian Med / poretools


Commits:
985833f1 by Andreas Tille at 2019-08-15T21:39:49Z
Apply patch by Steve Langasek <steve.langasek at canonical.com>

- - - - -
2f3f1e9a by Andreas Tille at 2019-08-15T21:41:49Z
Close bug

- - - - -
1a7d8765 by Andreas Tille at 2019-08-15T21:43:02Z
Add myself to Uploaders

- - - - -
0ef295c4 by Andreas Tille at 2019-08-15T21:43:59Z
debhelper-compat 12

- - - - -
a33ec836 by Andreas Tille at 2019-08-15T21:44:02Z
Standards-Version: 4.4.0

- - - - -
6c4e3ef3 by Andreas Tille at 2019-08-15T21:44:02Z
Secure URI in copyright format

- - - - -
4a8b8ed1 by Andreas Tille at 2019-08-15T21:44:18Z
Use secure URI in Homepage field.

Fixes lintian: homepage-field-uses-insecure-uri
See https://lintian.debian.org/tags/homepage-field-uses-insecure-uri.html for more details.

- - - - -
c025b834 by Andreas Tille at 2019-08-15T21:56:46Z
Upload to unstable

- - - - -


7 changed files:

- debian/changelog
- − debian/compat
- debian/control
- debian/copyright
- + debian/patches/python3.patch
- + debian/patches/series
- debian/rules


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,19 @@
+poretools (0.6.0+dfsg-4) unstable; urgency=medium
+
+  [ Steve Langasek ]
+  * Port to Python3
+    Closes: #934845
+
+  [ Andreas Tille ]
+  * Afif removed himself from Uploaders
+  * Add myself to Uploaders
+  * debhelper-compat 12
+  * Standards-Version: 4.4.0
+  * Secure URI in copyright format
+  * Use secure URI in Homepage field.
+
+ -- Andreas Tille <tille at debian.org>  Thu, 15 Aug 2019 23:44:33 +0200
+
 poretools (0.6.0+dfsg-3) unstable; urgency=low
 
   * Team upload.


=====================================
debian/compat deleted
=====================================
@@ -1 +0,0 @@
-11


=====================================
debian/control
=====================================
@@ -1,25 +1,26 @@
 Source: poretools
 Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
+Uploaders: Andreas Tille <tille at debian.org>
 Section: science
 Priority: optional
-Build-Depends: debhelper (>= 11~),
+Build-Depends: debhelper-compat (= 12),
                dh-python,
-               python-all,
-               python-setuptools,
-               python-h5py (>= 2.2),
-               python-matplotlib,
-               python-seaborn,
-               python-pandas
-Standards-Version: 4.1.5
+               python3-all,
+               python3-setuptools,
+               python3-h5py,
+               python3-matplotlib,
+               python3-seaborn,
+               python3-pandas
+Standards-Version: 4.4.0
 Vcs-Browser: https://salsa.debian.org/med-team/poretools
 Vcs-Git: https://salsa.debian.org/med-team/poretools.git
-Homepage: http://poretools.readthedocs.org
+Homepage: https://poretools.readthedocs.org
 
 Package: poretools
 Architecture: all
 Depends: ${misc:Depends},
-         ${python:Depends},
-         python-pkg-resources
+         ${python3:Depends},
+         python3-pkg-resources
 Description: toolkit for nanopore nucleotide sequencing data
  poretools is a flexible toolkit for exploring datasets generated by nanopore
  sequencing devices from MinION for the purposes of quality control and


=====================================
debian/copyright
=====================================
@@ -1,4 +1,4 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
 Upstream-Name: poretools
 Upstream-Contact: Aaron Quinlan <arq5x at virginia.edu>
 Source: https://github.com/arq5x/poretools


=====================================
debian/patches/python3.patch
=====================================
@@ -0,0 +1,935 @@
+Description: port to python3
+ Python2 is obsolete.  Port this code to python3.
+ Changes consist of 2to3 output, plus fixes for tab vs. space issues, and
+ a fix to argparse handling when we're called with no arguments.
+Author: Steve Langasek <steve.langasek at ubuntu.com>
+Last-Modified: 2019-08-15
+Bug-Debian: https://bugs.debian.org/934845
+
+Index: poretools-0.6.0+dfsg/setup.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/setup.py
++++ poretools-0.6.0+dfsg/setup.py
+@@ -3,7 +3,7 @@
+ 
+ version_py = os.path.join(os.path.dirname(__file__), 'poretools', 'version.py')
+ version = open(version_py).read().strip().split('=')[-1].replace('"','').strip()
+-print version
++print(version)
+ long_description = """
+ ``poretools`` is a toolset for working with nanopore sequencing data'
+ """
+Index: poretools-0.6.0+dfsg/poretools/__init__.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/__init__.py
++++ poretools-0.6.0+dfsg/poretools/__init__.py
+@@ -1,5 +1,5 @@
+ import os
+ import sys
+-import scripts
+-from Fast5File import *
+-from version import __version__
++from . import scripts
++from .Fast5File import *
++from .version import __version__
+Index: poretools-0.6.0+dfsg/poretools/Fast5File.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/Fast5File.py
++++ poretools-0.6.0+dfsg/poretools/Fast5File.py
+@@ -11,8 +11,8 @@
+ 
+ 
+ # poretools imports
+-import formats
+-from Event import Event
++from . import formats
++from .Event import Event
+ 
+ fastq_paths = {
+   'closed' : {},
+@@ -63,7 +63,7 @@
+     def __iter__(self):
+         return self
+ 
+-    def next(self):
++    def __next__(self):
+         if len(self.files) > 0:
+             return self.files.pop(0)
+         else:
+@@ -93,9 +93,9 @@
+ 	def __iter__(self):
+ 		return self
+ 
+-	def next(self):
++	def __next__(self):
+ 		try:
+-			return Fast5File(self.files.next(), self.group)
++			return Fast5File(next(self.files), self.group)
+ 		except Exception as e:
+ 			# cleanup our mess
+ 			if self.set_type == FAST5SET_TARBALL:
+@@ -156,9 +156,9 @@
+ 	def __iter__(self):
+ 		return self
+ 
+-	def next(self):
++	def __next__(self):
+ 		while True:
+-			tarinfo = self._tarfile.next()
++			tarinfo = next(self._tarfile)
+ 			if tarinfo is None:
+ 				raise StopIteration
+ 			elif self._fast5_filename_filter(tarinfo.name):
+@@ -211,7 +211,7 @@
+ 		try:
+ 			self.hdf5file = h5py.File(self.filename, 'r')
+ 			return True
+-		except Exception, e:
++		except Exception as e:
+ 			logger.warning("Cannot open file: %s. Perhaps it is corrupt? Moving on.\n" % self.filename)
+ 			return False
+ 
+@@ -327,7 +327,7 @@
+                         self._extract_fastas_from_fast5()
+                         self.have_fastas = True
+ 
+-		return self.fastas
++                return self.fastas
+ 
+ 	def get_fastq(self):
+ 		"""
+@@ -465,7 +465,7 @@
+     https://github.com/arq5x/poretools/issues""" % (self.filename, reason)
+ 		sys.exit(msg)
+ 
+-        def find_read_number_block_fixed_raw(self):
++	def find_read_number_block_fixed_raw(self):
+ 		"""
+ 		New-style FAST5/HDF5 structure:
+ 		There is a fixed 'Raw/Reads' node with only one 'read_NNN' item
+@@ -477,7 +477,7 @@
+ 		if raw_reads is None:
+ 			return None
+ 
+-		reads = raw_reads.keys()
++		reads = list(raw_reads.keys())
+ 		if len(reads)==0:
+ 			self.hdf_internal_error("Raw/Reads group does not contain any items")
+ 		if len(reads)>1:
+@@ -489,7 +489,7 @@
+ 			self.hdf_internal_error("Failed to get HDF5 item '%s'"% (path))
+ 		return node
+ 
+-        def find_read_number_block(self):
++	def find_read_number_block(self):
+ 		"""Returns the node of the 'Read_NNN' information, or None if not
+ 		found"""
+ 		node = self.find_read_number_block_link()
+@@ -652,31 +652,31 @@
+ 			self._get_metadata()
+ 			self.have_metadata = True
+ 
+-        def get_host_name(self):
+-                """
+-                Return the MinKNOW host computer name.
+-                """
+-                if self.have_metadata is False:
+-                        self._get_metadata()
+-                        self.have_metadata = True
+-
+-                try:
+-                        return self.keyinfo['tracking_id'].attrs['hostname']
+-                except:
+-                        return None
+-
+-                if self.have_metadata is False:
+-                        self._get_metadata()
+-                        self.have_metadata = True
++	def get_host_name(self):
++		"""
++		Return the MinKNOW host computer name.
++		"""
++		if self.have_metadata is False:
++			self._get_metadata()
++			self.have_metadata = True
++
++		try:
++			return self.keyinfo['tracking_id'].attrs['hostname']
++		except:
++			return None
++
++		if self.have_metadata is False:
++			self._get_metadata()
++			self.have_metadata = True
+ 
+ 	def get_device_id(self):
+ 		"""
+ 		Return the flowcell's device id.
+ 		"""
+ 
+-                if self.have_metadata is False:
+-                        self._get_metadata()
+-                        self.have_metadata = True
++		if self.have_metadata is False:
++			self._get_metadata()
++			self.have_metadata = True
+ 
+ 		try:
+ 			return self.keyinfo['tracking_id'].attrs['device_id']
+@@ -688,13 +688,13 @@
+ 		Return the user supplied sample name
+ 		"""
+ 
+-                if self.have_metadata is False:
+-                        self._get_metadata()
+-                        self.have_metadata = True
++		if self.have_metadata is False:
++			self._get_metadata()
++			self.have_metadata = True
+ 
+ 		try:
+ 			return self.keyinfo['context_tags'].attrs['user_filename_input']
+-		except Exception, e:
++		except Exception as e:
+ 			return None
+ 
+ 
+@@ -705,7 +705,7 @@
+ 		try:
+ 			table = self.hdf5file[fastq_paths[self.version]['template'] % self.group]
+ 			return len(table['Events'][()])
+-		except Exception, e:
++		except Exception as e:
+ 			return 0
+ 
+ 	def get_complement_events_count(self):
+@@ -715,7 +715,7 @@
+ 		try:
+ 			table = self.hdf5file[fastq_paths[self.version]['complement'] % self.group]
+ 			return len(table['Events'][()])
+-		except Exception, e:
++		except Exception as e:
+ 			return 0
+ 
+ 	def is_high_quality(self):
+@@ -746,7 +746,7 @@
+ 					return 'template'
+ 				else:
+ 					return 'complement'
+-		except Exception, e:
++		except Exception as e:
+ 			return None
+ 
+ 	####################################################################
+@@ -757,26 +757,26 @@
+ 		"""
+ 		Return the sequence in the FAST5 file in FASTQ format
+ 		"""
+-		for id, h5path in fastq_paths[self.version].iteritems(): 
++		for id, h5path in fastq_paths[self.version].items(): 
+ 			try:
+ 				table = self.hdf5file[h5path % self.group]
+ 				fq = formats.Fastq(table['Fastq'][()])
+ 				fq.name += " " + self.filename
+ 				self.fastqs[id] = fq
+-			except Exception, e:
++			except Exception as e:
+ 				pass
+ 
+ 	def _extract_fastas_from_fast5(self):
+ 		"""
+ 		Return the sequence in the FAST5 file in FASTA format
+ 		"""
+-		for id, h5path in fastq_paths[self.version].iteritems(): 
++		for id, h5path in fastq_paths[self.version].items(): 
+ 			try:
+ 				table = self.hdf5file[h5path % self.group]
+ 				fa = formats.Fasta(table['Fastq'][()])
+ 				fa.name += " " + self.filename
+ 				self.fastas[id] = fa
+-			except Exception, e:
++			except Exception as e:
+ 				pass
+ 
+ 	def _extract_template_events(self):
+@@ -786,7 +786,7 @@
+ 		try:
+ 			table = self.hdf5file[fastq_paths[self.version]['template'] % self.group]
+ 			self.template_events = [Event(x) for x in table['Events'][()]]
+-		except Exception, e:
++		except Exception as e:
+ 			self.template_events = []
+ 
+ 	def _extract_complement_events(self):
+@@ -796,7 +796,7 @@
+ 		try:
+ 			table = self.hdf5file[fastq_paths[self.version]['complement'] % self.group]
+ 			self.complement_events = [Event(x) for x in table['Events'][()]]
+-		except Exception, e:
++		except Exception as e:
+ 			self.complement_events = []
+ 
+ 	def _extract_pre_basecalled_events(self):
+@@ -815,9 +815,9 @@
+ 	def _get_metadata(self):
+ 		try:
+ 			self.keyinfo = self.hdf5file['/UniqueGlobalKey']
+-		except Exception, e:
++		except Exception as e:
+ 			try:
+ 				self.keyinfo = self.hdf5file['/Key']
+-			except Exception, e:
++			except Exception as e:
+ 				self.keyinfo = None
+ 				logger.warning("Cannot find keyinfo. Exiting.\n")
+Index: poretools-0.6.0+dfsg/poretools/formats.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/formats.py
++++ poretools-0.6.0+dfsg/poretools/formats.py
+@@ -19,7 +19,7 @@
+ 				phred = ord(score) - 33
+ 				error_count += 10.0 ** (-phred / 10.0)
+ 			return error_count / len(self.qual)
+-		except Exception, e:
++		except Exception as e:
+ 			return 0.0
+ 
+ 
+Index: poretools-0.6.0+dfsg/poretools/times.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/times.py
++++ poretools-0.6.0+dfsg/poretools/times.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ from time import strftime, localtime
+ import sys
+ 
+@@ -7,10 +7,10 @@
+ logger = logging.getLogger('poretools')
+ 
+ def run(parser, args):
+-	print '\t'.join(['channel', 'filename', 'read_length', 
++	print('\t'.join(['channel', 'filename', 'read_length', 
+ 		'exp_starttime', 'unix_timestamp', 'duration', 
+ 		'unix_timestamp_end', 'iso_timestamp', 'day', 
+-		'hour', 'minute'])
++		'hour', 'minute']))
+ 	
+ 	for fast5 in Fast5File.Fast5FileSet(args.files):
+ 		if fast5.is_open:
+@@ -29,7 +29,7 @@
+ 				read_length = 0
+ 
+ 			lt = localtime(start_time)
+-			print "\t".join([fast5.get_channel_number(),
++			print("\t".join([fast5.get_channel_number(),
+ 				fast5.filename, 
+ 				str(read_length),
+ 				str(fast5.get_exp_start_time()),
+@@ -39,5 +39,5 @@
+ 				strftime('%Y-%m-%dT%H:%M:%S%z', lt),
+ 				strftime('%d', lt),
+ 				strftime('%H', lt),
+-				strftime('%M', lt)])
++				strftime('%M', lt)]))
+ 			fast5.close()
+Index: poretools-0.6.0+dfsg/poretools/events.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/events.py
++++ poretools-0.6.0+dfsg/poretools/events.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ 
+ def run(parser, args):
+ 
+@@ -7,18 +7,18 @@
+ 			'length', 'model_state', 'model_level', 'move', \
+ 			'p_model_state', 'mp_model_state', 'p_mp_model_state', \
+ 			'p_A', 'p_C', 'p_G', 'p_T', 'raw_index']
+-	print "\t".join(keys)
++	print("\t".join(keys))
+ 
+ 	if args.pre_basecalled:
+ 		for fast5 in Fast5File.Fast5FileSet(args.files):
+ 			for event in fast5.get_pre_basecalled_events(): 
+-				print '\t'.join([fast5.filename, 'pre_basecalled', str(event)])
++				print('\t'.join([fast5.filename, 'pre_basecalled', str(event)]))
+ 	else:
+ 		for fast5 in Fast5File.Fast5FileSet(args.files):
+ 			for event in fast5.get_template_events():
+-				print '\t'.join([fast5.filename, 'template', str(event)]) 
++				print('\t'.join([fast5.filename, 'template', str(event)])) 
+ 			for event in fast5.get_complement_events():
+-				print '\t'.join([fast5.filename, 'complement', str(event)]) 
++				print('\t'.join([fast5.filename, 'complement', str(event)])) 
+ 
+ 		fast5.close()
+ 
+Index: poretools-0.6.0+dfsg/poretools/qualdist.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/qualdist.py
++++ poretools-0.6.0+dfsg/poretools/qualdist.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ from collections import Counter
+ 
+ def run(parser, args):
+@@ -15,5 +15,5 @@
+ 		fast5.close()
+ 
+ 	for q in qual_count:
+-		print '\t'.join(str(s) for s in [chr(q+33), q, qual_count[q], 
+-			total_nucs, float(qual_count[q]) / float(total_nucs)])
+\ No newline at end of file
++		print ('\t'.join(str(s) for s in [chr(q+33), q, qual_count[q], 
++			total_nucs, float(qual_count[q]) / float(total_nucs)]))
+Index: poretools-0.6.0+dfsg/poretools/metadata.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/metadata.py
++++ poretools-0.6.0+dfsg/poretools/metadata.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ 
+ def run(parser, args):
+ 
+@@ -6,17 +6,17 @@
+ 		for i, fast5 in enumerate(Fast5File.Fast5FileSet(args.files)):
+ 			for metadata_dict in fast5.read_metadata:
+ 				if i == 0:
+-					header = metadata_dict.keys()
+-					print "\t".join(["filename"] + header)
+-				print "\t".join([fast5.filename] + [str( metadata_dict[k] ) for k in header])
++					header = list(metadata_dict.keys())
++					print("\t".join(["filename"] + header))
++				print("\t".join([fast5.filename] + [str( metadata_dict[k] ) for k in header]))
+ 	else:
+-		print "asic_id\tasic_temp\theatsink_temp"
++		print("asic_id\tasic_temp\theatsink_temp")
+ 		for fast5 in Fast5File.Fast5FileSet(args.files):
+ 
+ 			asic_temp  = fast5.get_asic_temp()
+ 			asic_id = fast5.get_asic_id()
+ 			heatsink_temp = fast5.get_heatsink_temp()
+ 
+-			print "%s\t%s\t%s" % (asic_id, asic_temp, heatsink_temp)
++			print("%s\t%s\t%s" % (asic_id, asic_temp, heatsink_temp))
+ 
+ 			fast5.close()
+Index: poretools-0.6.0+dfsg/poretools/fastq.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/fastq.py
++++ poretools-0.6.0+dfsg/poretools/fastq.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ import sys
+ 
+ def run(parser, args):
+@@ -42,7 +42,7 @@
+ 			args.max_length > 0):			
+ 				continue
+ 
+-			print fa
++			print(fa)
+ 
+ 		fast5.close()
+ 
+Index: poretools-0.6.0+dfsg/poretools/occupancy.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/occupancy.py
++++ poretools-0.6.0+dfsg/poretools/occupancy.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ from collections import Counter
+ import sys
+ import pandas as pd
+@@ -35,8 +35,8 @@
+             pore_values.append(0)
+ 
+     # make a data frame of the lists
+-    d = {'rownum': range(1,17)*32,
+-        'colnum': sorted(range(1,33)*16),
++    d = {'rownum': list(range(1,17))*32,
++        'colnum': sorted(list(range(1,33))*16),
+         'tot_reads': pore_values,
+         'labels': flowcell_layout}
+     df = pd.DataFrame(d)
+@@ -55,7 +55,7 @@
+     tot_reads_per_pore = Counter()
+     tot_bp_per_pore = Counter()
+ 
+-    print "\t".join(['channel_number', 'start_time', 'duration'])
++    print("\t".join(['channel_number', 'start_time', 'duration']))
+     for fast5 in Fast5File.Fast5FileSet(args.files):
+         if fast5.is_open:
+             fq = fast5.get_fastq()
+@@ -70,10 +70,10 @@
+             tot_reads_per_pore[int(pore_id)] += 1
+             tot_bp_per_pore[int(pore_id)] += len(fq.seq)
+ 
+-            print "\t".join([
++            print("\t".join([
+                 str(pore_id),
+                 str(start_time),
+-                str(fast5.get_duration())])
++                str(fast5.get_duration())]))
+             fast5.close()
+ 
+     if args.plot_type == 'read_count':
+Index: poretools-0.6.0+dfsg/poretools/index.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/index.py
++++ poretools-0.6.0+dfsg/poretools/index.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ import datetime
+ 
+ ############
+@@ -17,7 +17,7 @@
+ 
+ def run(parser, args):
+ 
+-	print "source_filename\ttemplate_fwd_length\tcomplement_rev_length\t2d_length\tasic_id\tasic_temp\theatsink_temp\tchannel\texp_start_time\texp_start_time_string_date\texp_start_time_string_time\tstart_time\tstart_time_string_date\tstart_time_string_time\tduration\tfast5_version"
++	print("source_filename\ttemplate_fwd_length\tcomplement_rev_length\t2d_length\tasic_id\tasic_temp\theatsink_temp\tchannel\texp_start_time\texp_start_time_string_date\texp_start_time_string_time\tstart_time\tstart_time_string_date\tstart_time_string_time\tduration\tfast5_version")
+ 
+ 	for fast5 in Fast5File.Fast5FileSet(args.files):
+ 		
+@@ -56,11 +56,11 @@
+ 			length_complement = len(fastq_reads[1].seq)
+ 			length_2d = len(fastq_reads[2].seq)
+ 
+-		print "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (
++		print("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" % (
+ 			fast5.filename,
+ 			length_template,
+ 			length_complement,
+ 			length_2d,		
+-			asic_id, asic_temp, heatsink_temp,channel_number,exp_start_time,exp_start_time_string,start_time,start_time_string,duration,fast5_version)
++			asic_id, asic_temp, heatsink_temp,channel_number,exp_start_time,exp_start_time_string,start_time,start_time_string,duration,fast5_version))
+ 
+ 		fast5.close()
+Index: poretools-0.6.0+dfsg/poretools/readstats.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/readstats.py
++++ poretools-0.6.0+dfsg/poretools/readstats.py
+@@ -1,8 +1,8 @@
+-import Fast5File
++from . import Fast5File
+ 
+ def run(parser, args):
+ 
+-	print "start_time\tchannel_number\tread_number\ttemplate_events\tcomplement_events"
++	print("start_time\tchannel_number\tread_number\ttemplate_events\tcomplement_events")
+ 
+ 	for fast5 in Fast5File.Fast5FileSet(args.files):
+ 
+@@ -22,6 +22,6 @@
+ 		else:
+ 			complement_len = 0
+ 
+-		print "%s\t%s\t%s\t%s\t%s" % (start_time, channel_number, read_number, template_len, complement_len)
++		print("%s\t%s\t%s\t%s\t%s" % (start_time, channel_number, read_number, template_len, complement_len))
+ 
+ 		fast5.close()
+Index: poretools-0.6.0+dfsg/poretools/winner.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/winner.py
++++ poretools-0.6.0+dfsg/poretools/winner.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ import sys
+ 
+ #logging
+@@ -21,5 +21,5 @@
+ 		fast5.close()
+ 
+ 	logger.info("Wow, it's a whopper: your longest read is %d bases." % (longest_size,))
+-	print longest_read
++	print(longest_read)
+ 
+Index: poretools-0.6.0+dfsg/poretools/stats.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/stats.py
++++ poretools-0.6.0+dfsg/poretools/stats.py
+@@ -1,5 +1,5 @@
+-import statistics as stat
+-import Fast5File
++from . import statistics as stat
++from . import Fast5File
+ import logging
+ from collections import defaultdict
+ logger = logging.getLogger('poretools')
+@@ -14,7 +14,7 @@
+ 			fas = fast5.get_fastas_dict()
+ 			if len(fas) > 0:
+ 				basecalled_files += 1
+-			for category, fa in fas.iteritems():
++			for category, fa in fas.items():
+ 				if fa is not None:
+ 					stats[category].append(len(fa.seq))
+ 					if category == 'twodirections':
+@@ -23,22 +23,22 @@
+ 
+ 			fast5.close()
+ 
+-		print "files\ttotal reads\t%d" % (files)
+-		print "files\ttotal base-called reads\t%d" % (basecalled_files)
++		print("files\ttotal reads\t%d" % (files))
++		print("files\ttotal base-called reads\t%d" % (basecalled_files))
+ 		for category in sorted(stats.keys()):
+ 			sizes = stats[category]
+ 
+ 			if len(sizes) > 0:
+-				print "%s\ttotal reads\t%d" % (category, len(sizes))
+-				print "%s\ttotal base pairs\t%d" % (category, sum(sizes))
+-				print "%s\tmean\t%.2f" % (category, stat.mean(sizes))
+-				print "%s\tmedian\t%d" % (category, stat.median(sizes))
+-				print "%s\tmin\t%d" % (category, min(sizes))
+-				print "%s\tmax\t%d" % (category, max(sizes))
++				print("%s\ttotal reads\t%d" % (category, len(sizes)))
++				print("%s\ttotal base pairs\t%d" % (category, sum(sizes)))
++				print("%s\tmean\t%.2f" % (category, stat.mean(sizes)))
++				print("%s\tmedian\t%d" % (category, stat.median(sizes)))
++				print("%s\tmin\t%d" % (category, min(sizes)))
++				print("%s\tmax\t%d" % (category, max(sizes)))
+ 				nxvalues = stat.NX(sizes, [25,50,75])
+-				print "%s\tN25\t%d" % (category, nxvalues[25])
+-				print "%s\tN50\t%d" % (category, nxvalues[50])
+-				print "%s\tN75\t%d" % (category, nxvalues[75])
++				print("%s\tN25\t%d" % (category, nxvalues[25]))
++				print("%s\tN50\t%d" % (category, nxvalues[50]))
++				print("%s\tN75\t%d" % (category, nxvalues[75]))
+ 			else:
+ 				logger.warning("No valid sequences observed.\n")
+ 	else:
+@@ -49,15 +49,15 @@
+ 			fast5.close()
+ 
+ 		if len(sizes) > 0:
+-			print "total reads\t%d" % (len(sizes))
+-			print "total base pairs\t%d" % (sum(sizes))
+-			print "mean\t%.2f" % (stat.mean(sizes))
+-			print "median\t%d" % (stat.median(sizes))
+-			print "min\t%d" % (min(sizes))
+-			print "max\t%d" % (max(sizes))
+-                        nxvalues = stat.NX(sizes, [25,50,75])
+-                        print "N25\t%d" % (nxvalues[25])
+-                        print "N50\t%d" % (nxvalues[50])
+-                        print "N75\t%d" % (nxvalues[75])
++			print("total reads\t%d" % (len(sizes)))
++			print("total base pairs\t%d" % (sum(sizes)))
++			print("mean\t%.2f" % (stat.mean(sizes)))
++			print("median\t%d" % (stat.median(sizes)))
++			print("min\t%d" % (min(sizes)))
++			print("max\t%d" % (max(sizes)))
++			nxvalues = stat.NX(sizes, [25,50,75])
++			print("N25\t%d" % (nxvalues[25]))
++			print("N50\t%d" % (nxvalues[50]))
++			print("N75\t%d" % (nxvalues[75]))
+ 		else:
+ 			logger.warning("No valid sequences observed.\n")
+Index: poretools-0.6.0+dfsg/poretools/nucdist.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/nucdist.py
++++ poretools-0.6.0+dfsg/poretools/nucdist.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ from collections import Counter
+ 
+ def run(parser, args):
+@@ -15,5 +15,5 @@
+ 		fast5.close()
+ 
+ 	for n in nuc_count:
+-		print '\t'.join(str(s) for s in [n, nuc_count[n], 
+-			total_nucs, float(nuc_count[n]) / float(total_nucs)])
+\ No newline at end of file
++		print ('\t'.join(str(s) for s in [n, nuc_count[n], 
++			total_nucs, float(nuc_count[n]) / float(total_nucs)]))
+Index: poretools-0.6.0+dfsg/poretools/tabular.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/tabular.py
++++ poretools-0.6.0+dfsg/poretools/tabular.py
+@@ -1,8 +1,8 @@
+-import Fast5File
++from . import Fast5File
+ 
+ def run(parser, args):
+ 	
+-	print '\t'.join(['length', 'name', 'sequence', 'quals'])
++	print('\t'.join(['length', 'name', 'sequence', 'quals']))
+ 	
+ 	for fast5 in Fast5File.Fast5FileSet(args.files):
+ 		fqs = fast5.get_fastqs(args.type)
+@@ -10,5 +10,5 @@
+ 			if fq is None:
+ 				fast5.close()
+ 				continue
+-			print '\t'.join([str(len(fq.seq)), fq.name, fq.seq, fq.qual])
+-		fast5.close()
+\ No newline at end of file
++			print ('\t'.join([str(len(fq.seq)), fq.name, fq.seq, fq.qual]))
++		fast5.close()
+Index: poretools-0.6.0+dfsg/poretools/fasta.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/fasta.py
++++ poretools-0.6.0+dfsg/poretools/fasta.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ import sys
+ 
+ def run(parser, args):
+@@ -42,7 +42,7 @@
+ 			args.max_length > 0):			
+ 				continue			
+ 
+-			print fa
++			print(fa)
+ 
+ 		fast5.close()
+ 
+Index: poretools-0.6.0+dfsg/poretools/statistics.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/statistics.py
++++ poretools-0.6.0+dfsg/poretools/statistics.py
+@@ -27,25 +27,25 @@
+ 		return None
+ 
+ def NX(l, x=[25,50,75]):
+-        """
+-        Returns NX for all x for a list of numbers l.
+-        Default: N25, N50, N75
+-        Assumes all values in list x are between 0 and 100.
+-        Interpretation: When NX = NX_value, X% of data (in bp) is contained in reads at least NX_value bp long.
+-        """
++	"""
++	Returns NX for all x for a list of numbers l.
++	Default: N25, N50, N75
++	Assumes all values in list x are between 0 and 100.
++	Interpretation: When NX = NX_value, X% of data (in bp) is contained in reads at least NX_value bp long.
++	"""
+ 	if isinstance(l, list) and isinstance(x, list):
+ 		l = sorted(l)
+ 		x = sorted(x)
+ 		total = sum(l)
+-                nxsum = 0
+-                nxvalues = {e:0 for e in x}
++		nxsum = 0
++		nxvalues = {e:0 for e in x}
+ 		for e in x:
+-                        xpct = total*e/100.0
+-                        while nxsum < xpct and l:
+-                                nxsum += l[-1]
+-                                lastsize = l.pop()
+-                        nxvalues[e] = lastsize
+-                return nxvalues
++			xpct = total*e/100.0
++			while nxsum < xpct and l:
++				nxsum += l[-1]
++				lastsize = l.pop()
++			nxvalues[e] = lastsize
++		return nxvalues
+ 
+ 	else:
+ 		return None
+Index: poretools-0.6.0+dfsg/poretools/poretools_main.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/poretools_main.py
++++ poretools-0.6.0+dfsg/poretools/poretools_main.py
+@@ -13,43 +13,43 @@
+ 
+ def run_subtool(parser, args):
+     if args.command == 'combine':
+-        import combine as submodule
++        from . import combine as submodule
+     elif args.command == 'events':
+-        import events as submodule
++        from . import events as submodule
+     elif args.command == 'fasta':
+-        import fasta as submodule
++        from . import fasta as submodule
+     elif args.command == 'fastq':
+-        import fastq as submodule
++        from . import fastq as submodule
+     elif args.command == 'hist':
+-        import hist as submodule
++        from . import hist as submodule
+     elif args.command == 'metadata':
+-        import metadata as submodule
++        from . import metadata as submodule
+     elif args.command == 'nucdist':
+-        import nucdist as submodule
++        from . import nucdist as submodule
+     elif args.command == 'occupancy':
+-        import occupancy as submodule
++        from . import occupancy as submodule
+     elif args.command == 'qualdist':
+-        import qualdist as submodule
++        from . import qualdist as submodule
+     elif args.command == 'qualpos':
+-        import qual_v_pos as submodule
++        from . import qual_v_pos as submodule
+     elif args.command == 'readstats':
+-        import readstats as submodule
++        from . import readstats as submodule
+     elif args.command == 'stats':
+-        import stats as submodule
++        from . import stats as submodule
+     elif args.command == 'tabular':
+-        import tabular as submodule
++        from . import tabular as submodule
+     elif args.command == 'times':
+-        import times as submodule
++        from . import times as submodule
+     elif args.command == 'squiggle':
+-        import squiggle as submodule
++        from . import squiggle as submodule
+     elif args.command == 'winner':
+-        import winner as submodule
++        from . import winner as submodule
+     elif args.command == 'yield_plot':
+-        import yield_plot as submodule
++        from . import yield_plot as submodule
+     elif args.command == 'index':
+-        import index as submodule
++        from . import index as submodule
+     elif args.command == 'organise':
+-        import organise as submodule
++        from . import organise as submodule
+ 
+     # run the chosen submodule.
+     submodule.run(parser, args)
+@@ -57,7 +57,7 @@
+ class ArgumentParserWithDefaults(argparse.ArgumentParser):
+     def __init__(self, *args, **kwargs):
+         super(ArgumentParserWithDefaults, self).__init__(*args, **kwargs)
+-	self.add_argument("-q", "--quiet", help="Do not output warnings to stderr",
++        self.add_argument("-q", "--quiet", help="Do not output warnings to stderr",
+                         action="store_true",
+                         dest="quiet")
+ 
+@@ -526,12 +526,16 @@
+     #######################################################
+     args = parser.parse_args()
+ 
++    if not args.command:
++        parser.print_help()
++        sys.exit(0)
++
+     if args.quiet:
+         logger.setLevel(logging.ERROR)
+ 
+     try:
+       args.func(parser, args)
+-    except IOError, e:
++    except IOError as e:
+          if e.errno != 32:  # ignore SIGPIPE
+              raise
+ 
+Index: poretools-0.6.0+dfsg/poretools/combine.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/combine.py
++++ poretools-0.6.0+dfsg/poretools/combine.py
+@@ -1,6 +1,6 @@
+ import tarfile
+ import sys
+-import Fast5File
++from . import Fast5File
+ 
+ #logging
+ import logging
+Index: poretools-0.6.0+dfsg/poretools/hist.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/hist.py
++++ poretools-0.6.0+dfsg/poretools/hist.py
+@@ -6,7 +6,7 @@
+ from matplotlib import pyplot as plt
+ 
+ import seaborn as sns
+-import Fast5File
++from . import Fast5File
+ 
+ import logging
+ logger = logging.getLogger('poretools')
+Index: poretools-0.6.0+dfsg/poretools/organise.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/organise.py
++++ poretools-0.6.0+dfsg/poretools/organise.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ import sys
+ import os
+ from os import makedirs
+Index: poretools-0.6.0+dfsg/poretools/qual_v_pos.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/qual_v_pos.py
++++ poretools-0.6.0+dfsg/poretools/qual_v_pos.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ from collections import defaultdict
+ import pandas
+ import matplotlib.pyplot as plt
+Index: poretools-0.6.0+dfsg/poretools/squiggle.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/squiggle.py
++++ poretools-0.6.0+dfsg/poretools/squiggle.py
+@@ -10,7 +10,7 @@
+ import logging
+ logger = logging.getLogger('poretools')
+ 
+-import Fast5File
++from . import Fast5File
+ 
+ def plot_squiggle(args, filename, start_times, mean_signals):
+     """
+@@ -70,7 +70,7 @@
+ 
+     fast5_set = Fast5File.Fast5FileSet(args.files)
+ 
+-    first_fast5 = fast5_set.next()
++    first_fast5 = next(fast5_set)
+     for fast5 in fast5_set:
+         # only create a squiggle plot for multiple reads if saving to file.
+         if args.saveas is None:
+Index: poretools-0.6.0+dfsg/poretools/yield_plot.py
+===================================================================
+--- poretools-0.6.0+dfsg.orig/poretools/yield_plot.py
++++ poretools-0.6.0+dfsg/poretools/yield_plot.py
+@@ -1,4 +1,4 @@
+-import Fast5File
++from . import Fast5File
+ import matplotlib
+ #matplotlib.use('Agg') # Must be called before any other matplotlib calls
+ from matplotlib import pyplot as plt
+@@ -25,16 +25,16 @@
+         # compute the cumulative based on reads or total base pairs
+         if args.plot_type == 'reads':
+                 y_label = "Total reads"
+-                cumulative = np.cumsum(range(len(start_times)))
++                cumulative = np.cumsum(list(range(len(start_times))))
+         elif args.plot_type == 'basepairs':
+                 y_label = "Total base pairs"
+                 cumulative = np.cumsum(read_lengths)
+ 
+         step = args.skip
+         # make a data frame of the lists
+-        d = {'start': [start_times[n] for n in xrange(0, len(start_times), step)],
+-             'lengths': [read_lengths[n] for n in xrange(0, len(read_lengths), step)],
+-             'cumul': [cumulative[n] for n in xrange(0, len(cumulative), step)]}
++        d = {'start': [start_times[n] for n in range(0, len(start_times), step)],
++             'lengths': [read_lengths[n] for n in range(0, len(read_lengths), step)],
++             'cumul': [cumulative[n] for n in range(0, len(cumulative), step)]}
+         df = pd.DataFrame(d)
+ 
+         if args.savedf:


=====================================
debian/patches/series
=====================================
@@ -0,0 +1 @@
+python3.patch


=====================================
debian/rules
=====================================
@@ -6,4 +6,4 @@ export LC_ALL=C.UTF-8
 export PYBUILD_DESTDIR=debian/poretools
 
 %:
-	dh $@ --with python2 --buildsystem=pybuild
+	dh $@ --with python3 --buildsystem=pybuild



View it on GitLab: https://salsa.debian.org/med-team/poretools/compare/9f6d6dc9b18c2a3db6573f1f8245bc450dd352cc...c025b834827190f6bee251ba994a7288134486a6

-- 
View it on GitLab: https://salsa.debian.org/med-team/poretools/compare/9f6d6dc9b18c2a3db6573f1f8245bc450dd352cc...c025b834827190f6bee251ba994a7288134486a6
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/20190815/9850ce94/attachment-0001.html>


More information about the debian-med-commit mailing list