[med-svn] [Git][med-team/scoary][master] 4 commits: Use 2to3 to port to Python3
Andreas Tille
gitlab at salsa.debian.org
Fri Sep 13 20:51:36 BST 2019
Andreas Tille pushed to branch master at Debian Med / scoary
Commits:
b28bfa54 by Andreas Tille at 2019-09-13T14:14:34Z
Use 2to3 to port to Python3
- - - - -
e38abeea by Andreas Tille at 2019-09-13T14:16:05Z
Adjust packaging to Python3
- - - - -
370f6dc3 by Andreas Tille at 2019-09-13T14:16:22Z
debhelper-compat 12
- - - - -
f635c072 by Andreas Tille at 2019-09-13T14:16:25Z
Standards-Version: 4.4.0
- - - - -
6 changed files:
- debian/changelog
- − debian/compat
- debian/control
- + debian/patches/2to3.patch
- + debian/patches/series
- debian/rules
Changes:
=====================================
debian/changelog
=====================================
@@ -1,3 +1,12 @@
+scoary (1.6.16-2) UNRELEASED; urgency=medium
+
+ * Use 2to3 to port to Python3
+ Closes: #938447
+ * debhelper-compat 12
+ * Standards-Version: 4.4.0
+
+ -- Andreas Tille <tille at debian.org> Fri, 13 Sep 2019 16:13:39 +0200
+
scoary (1.6.16-1) unstable; urgency=medium
* Initial release (Closes: #920857)
=====================================
debian/compat deleted
=====================================
@@ -1 +0,0 @@
-9
=====================================
debian/control
=====================================
@@ -3,14 +3,13 @@ Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.
Uploaders: Andreas Tille <tille at debian.org>
Section: science
Priority: optional
-Build-Depends: debhelper (>=9),
+Build-Depends: debhelper-compat (= 12),
dh-python,
- python-all,
- python-setuptools,
- python-scipy (>= 0.16),
-# Test-Depends:
- python-nose
-Standards-Version: 4.3.0
+ python3-all,
+ python3-setuptools,
+ python3-scipy (>= 0.16),
+ python3-nose <!nocheck>
+Standards-Version: 4.4.0
Vcs-Browser: https://salsa.debian.org/med-team/scoary
Vcs-Git: https://salsa.debian.org/med-team/scoary.git
Homepage: https://github.com/AdmiralenOla/Scoary
@@ -18,8 +17,9 @@ Homepage: https://github.com/AdmiralenOla/Scoary
Package: scoary
Architecture: all
Depends: ${misc:Depends},
- ${python:Depends},
- python-pkg-resources
+ ${python3:Depends},
+ python3-pkg-resources,
+ python3-scipy
Suggests: roary
Description: pangenome-wide association studies
Scoary is designed to take the gene_presence_absence.csv file from
=====================================
debian/patches/2to3.patch
=====================================
@@ -0,0 +1,1123 @@
+Description: Use 2to3 to port to Python3
+Bug-Debian: https://bugs.debian.org/938447
+Author: Andreas Tille <tille at debian.org>
+Last-Update: Fri, 13 Sep 2019 16:13:39 +0200
+
+--- a/scoary.py
++++ b/scoary.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python3
+
+ # Scoary - Microbial Pan-GWAS. Associates genes in Roary output with phenotypes
+ # Copyright (C) 2016 Ola Brynildsrud (ola.brynildsrud at fhi.no)
+--- a/scoary/GUI.py
++++ b/scoary/GUI.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python3
+ # -*- coding: utf-8 -*-
+
+ """
+@@ -12,7 +12,7 @@ import sys, os
+ import threading
+
+ try:
+- import Tkinter
++ import tkinter
+ except ImportError:
+ #Python 3 issues
+ try:
+@@ -21,7 +21,7 @@ except ImportError:
+ sys.exit("Need to have Tkinter / tkinter installed")
+
+ try:
+- import tkFileDialog
++ import tkinter.filedialog
+ except ImportError:
+ # Python 3 issues
+ try:
+@@ -31,7 +31,7 @@ except ImportError:
+ sys.exit("Could not find tkFileDialog / filedialog")
+
+ try:
+- import ttk
++ import tkinter.ttk
+ except ImportError:
+ # Python 3 issues
+ try:
+@@ -63,12 +63,12 @@ except ImportError:
+
+ from pkg_resources import resource_string, resource_filename
+
+-class ScoaryGUI(Tkinter.Tk):
++class ScoaryGUI(tkinter.Tk):
+ """
+ Create the main GUI window
+ """
+ def __init__(self,parent):
+- Tkinter.Tk.__init__(self,parent)
++ tkinter.Tk.__init__(self,parent)
+ self.parent = parent
+
+ self.Scoary_parameters = {"GPA": None,"Trait":None,"Tree":None,
+@@ -86,15 +86,15 @@ class ScoaryGUI(Tkinter.Tk):
+ }
+ self.initialize_menu()
+
+- self.toppart = Tkinter.Frame(self,height="350",width="800")
+- self.bottompart = Tkinter.Frame(self,height="50",width="800")
++ self.toppart = tkinter.Frame(self,height="350",width="800")
++ self.bottompart = tkinter.Frame(self,height="50",width="800")
+ self.toppart.pack(side='top',expand=False)
+ self.bottompart.pack(side='bottom',expand=True,fill='both')
+
+- self.nwpart = Tkinter.Frame(self.toppart,
++ self.nwpart = tkinter.Frame(self.toppart,
+ height="350",
+ width="250")
+- self.nepart = Tkinter.LabelFrame(self.toppart,
++ self.nepart = tkinter.LabelFrame(self.toppart,
+ height="350",
+ width="550",
+ text="Control panel")
+@@ -103,7 +103,7 @@ class ScoaryGUI(Tkinter.Tk):
+
+ # Add further frames to top or bottom
+
+- self.logocanvas = Tkinter.Canvas(self.nwpart,
++ self.logocanvas = tkinter.Canvas(self.nwpart,
+ height="250",
+ width="250",
+ relief="ridge",
+@@ -111,7 +111,7 @@ class ScoaryGUI(Tkinter.Tk):
+ highlightthickness=0)
+ self.logocanvas.pack(side='top',expand=False)
+
+- self.citationframe = Tkinter.Frame(self.nwpart,
++ self.citationframe = tkinter.Frame(self.nwpart,
+ height="100",
+ width="250")
+ self.citationframe.pack(side='bottom',expand=False,fill='none')
+@@ -127,15 +127,15 @@ class ScoaryGUI(Tkinter.Tk):
+ """
+ Initialize the menu at the top
+ """
+- self.menubar = Tkinter.Menu(self,relief="flat")
+- filemenu = Tkinter.Menu(self.menubar,tearoff=0)
++ self.menubar = tkinter.Menu(self,relief="flat")
++ filemenu = tkinter.Menu(self.menubar,tearoff=0)
+ filemenu.add_command(label="About",command=self.AboutScoary)
+ filemenu.add_separator()
+ filemenu.add_command(label="Quit",command=self.quit)
+ self.filemenu = filemenu
+ self.menubar.add_cascade(label="File",menu=self.filemenu)
+
+- optsmenu = Tkinter.Menu(self.menubar,tearoff=0)
++ optsmenu = tkinter.Menu(self.menubar,tearoff=0)
+ optsmenu.add_command(label="Clear", command=self.ClearAll)
+ optsmenu.add_command(label="Test example",
+ command=self.TestExample)
+@@ -149,7 +149,7 @@ class ScoaryGUI(Tkinter.Tk):
+ Initialize the citation frame - below the logo
+ """
+ myfontstyle = ("Arial",8)
+- self.citation = Tkinter.Label(self.citationframe,
++ self.citation = tkinter.Label(self.citationframe,
+ text=self.citationtext(),
+ anchor='center',
+ justify='center',
+@@ -162,13 +162,13 @@ class ScoaryGUI(Tkinter.Tk):
+ """
+ frame = self.bottompart
+
+- frame.pb = ttk.Progressbar(frame,
++ frame.pb = tkinter.ttk.Progressbar(frame,
+ orient='horizontal',
+ mode='determinate',
+ maximum=100)
+ frame.pb.pack(fill='both',expand=True,side='top')
+
+- frame.lab = Tkinter.Label(frame,text=u"Awaiting input options")
++ frame.lab = tkinter.Label(frame,text="Awaiting input options")
+ frame.lab.pack(in_=frame.pb,expand=True)
+ #sys.stdout = StdoutToLabel(frame.lab, progressbar=frame.pb)
+ sys.stdout = StdoutToLabel(frame.lab,
+@@ -181,87 +181,87 @@ class ScoaryGUI(Tkinter.Tk):
+ """
+ board = self.nepart
+
+- self.GPAentryVariable = Tkinter.StringVar()
++ self.GPAentryVariable = tkinter.StringVar()
+ board.GPAentry = \
+- Tkinter.Entry(board,
++ tkinter.Entry(board,
+ textvariable = self.GPAentryVariable,
+ width=60)
+ board.GPAentry.grid(column=0,row=0,sticky='W',columnspan=2)
+ self.GPAentryVariable.set("Path to gene presence absence file")
+
+- self.TraitsentryVariable = Tkinter.StringVar()
++ self.TraitsentryVariable = tkinter.StringVar()
+ board.Traitsentry = \
+- Tkinter.Entry(board,
++ tkinter.Entry(board,
+ textvariable=self.TraitsentryVariable,
+ width=60)
+ board.Traitsentry.grid(column=0,row=1,sticky='W',columnspan=2)
+ self.TraitsentryVariable.set("Path to traits/phenotype file")
+
+- self.TreeentryVariable = Tkinter.StringVar()
++ self.TreeentryVariable = tkinter.StringVar()
+ board.Treeentry = \
+- Tkinter.Entry(board,
++ tkinter.Entry(board,
+ textvariable=self.TreeentryVariable,
+ width=60)
+ board.Treeentry.grid(column=0,row=2,sticky='W',columnspan=2)
+ self.TreeentryVariable.set(
+ "(Optional) Path to custom tree file")
+
+- self.RestrictVariable = Tkinter.StringVar()
++ self.RestrictVariable = tkinter.StringVar()
+ board.Restrictentry = \
+- Tkinter.Entry(board,
++ tkinter.Entry(board,
+ textvariable=self.RestrictVariable,
+ width=60)
+ board.Restrictentry.grid(column=0,row=3,sticky='W',columnspan=2)
+ self.RestrictVariable.set(
+ "(Optional) Path to file naming isolates to include")
+
+- self.Outputdir = Tkinter.StringVar()
++ self.Outputdir = tkinter.StringVar()
+ board.Outputentry = \
+- Tkinter.Entry(board,
++ tkinter.Entry(board,
+ textvariable=self.Outputdir,
+ width=60)
+ board.Outputentry.grid(column=0,row=4,sticky='W',columnspan=2)
+ self.Outputdir.set("(Optional) Output directory")
+
+ browsebuttonGPA = \
+- Tkinter.Button(board,
+- text=u"Browse...",
++ tkinter.Button(board,
++ text="Browse...",
+ command=self.BrowseButtonClickGPA)
+ browsebuttonGPA.grid(column=2,row=0,sticky='e')
+
+ browsebuttonTraits = \
+- Tkinter.Button(board,
+- text=u"Browse...",
++ tkinter.Button(board,
++ text="Browse...",
+ command=self.BrowseButtonClickTraits)
+ browsebuttonTraits.grid(column=2,row=1,sticky='e')
+
+ browsebuttonTreeFile = \
+- Tkinter.Button(board,
+- text=u"Browse...",
++ tkinter.Button(board,
++ text="Browse...",
+ command=self.BrowseButtonClickTreeFile)
+ browsebuttonTreeFile.grid(column=2,row=2,sticky='e')
+
+ browsebuttonRestrict = \
+- Tkinter.Button(board,
+- text=u"Browse...",
++ tkinter.Button(board,
++ text="Browse...",
+ command=self.BrowseButtonClickRestrict)
+ browsebuttonRestrict.grid(column=2,row=3,sticky='e')
+
+ browsebuttonOutput = \
+- Tkinter.Button(board,
+- text=u"Browse...",
++ tkinter.Button(board,
++ text="Browse...",
+ command=self.BrowseButtonClickOutput)
+ browsebuttonOutput.grid(column=2,row=4,sticky='e')
+
+ # Initialize frame for cutoffs
+- board.pframe = Tkinter.LabelFrame(board,
++ board.pframe = tkinter.LabelFrame(board,
+ text="Cut-offs",
+ relief='ridge')
+ board.pframe.grid(column=0,row=5,sticky='w')
+ self.initialize_pvalueframe()
+
+ # Initialize frame for misc options
+- board.miscframe = Tkinter.LabelFrame(board,
++ board.miscframe = tkinter.LabelFrame(board,
+ text="Misc options",
+ relief='ridge')
+ board.miscframe.grid(column=1,row=5,sticky='e',columnspan=2)
+@@ -269,26 +269,26 @@ class ScoaryGUI(Tkinter.Tk):
+
+ ## Create extra space
+
+- board.emptyspace = Tkinter.Frame(board)
++ board.emptyspace = tkinter.Frame(board)
+ board.emptyspace.grid(column=0,row=6,columnspan=3,pady=(20,20))
+
+ masterbuttonfont = ("Courier", 16)
+
+- RunButton = Tkinter.Button(board.emptyspace,
+- text=u"Run analysis",
++ RunButton = tkinter.Button(board.emptyspace,
++ text="Run analysis",
+ font=masterbuttonfont,
+ command=self.RunAnalysis,
+ padx=15,pady=10)
+ RunButton.grid(column=2,row=0)
+
+- QuitButton = Tkinter.Button(board.emptyspace,
+- text=u"Quit",
++ QuitButton = tkinter.Button(board.emptyspace,
++ text="Quit",
+ font=masterbuttonfont,
+ command=self.quit,padx=15,pady=10)
+ QuitButton.grid(column=1,row=0)
+
+- HelpButton = Tkinter.Button(board.emptyspace,
+- text=u"Help",
++ HelpButton = tkinter.Button(board.emptyspace,
++ text="Help",
+ font=masterbuttonfont,
+ command=self.HelpButton,
+ padx=15,pady=10)
+@@ -302,100 +302,100 @@ class ScoaryGUI(Tkinter.Tk):
+ miscframe = board.miscframe
+
+ # Max hits
+- self.mhtext = Tkinter.StringVar()
+- miscframe.mhlab = Tkinter.Label(miscframe,
++ self.mhtext = tkinter.StringVar()
++ miscframe.mhlab = tkinter.Label(miscframe,
+ textvariable=self.mhtext)
+ miscframe.mhlab.grid(column=0,row=0,sticky='w')
+ self.mhtext.set("Max hits")
+
+- self.maxhitsvar = Tkinter.StringVar()
++ self.maxhitsvar = tkinter.StringVar()
+ miscframe.maxhitsentry = \
+- Tkinter.Entry(miscframe,
++ tkinter.Entry(miscframe,
+ textvariable=self.maxhitsvar,
+ width=8)
+ miscframe.maxhitsentry.grid(column=1,row=0)
+ self.maxhitsvar.set("")
+
+ # Delimiter
+- self.delimtext = Tkinter.StringVar()
++ self.delimtext = tkinter.StringVar()
+ miscframe.delim = \
+- Tkinter.Label(miscframe,
++ tkinter.Label(miscframe,
+ textvariable=self.delimtext)
+ miscframe.delim.grid(column=0,row=1,sticky='w')
+ self.delimtext.set("Delimiter")
+
+- self.delimvar = Tkinter.StringVar()
++ self.delimvar = tkinter.StringVar()
+ miscframe.delimentry = \
+- Tkinter.Entry(miscframe,
++ tkinter.Entry(miscframe,
+ textvariable=self.delimvar,
+ width=8)
+ miscframe.delimentry.grid(column=1,row=1)
+ self.delimvar.set(",")
+
+ # Starting column
+- self.sctext = Tkinter.StringVar()
++ self.sctext = tkinter.StringVar()
+ miscframe.sclab = \
+- Tkinter.Label(miscframe,
++ tkinter.Label(miscframe,
+ textvariable=self.sctext)
+ miscframe.sclab.grid(row=2,column=0,sticky='w')
+ self.sctext.set("Startcol GPA file")
+
+- self.scvar = Tkinter.StringVar()
+- miscframe.sc = Tkinter.Entry(miscframe,textvariable=self.scvar,width=8)
++ self.scvar = tkinter.StringVar()
++ miscframe.sc = tkinter.Entry(miscframe,textvariable=self.scvar,width=8)
+ miscframe.sc.grid(row=2,column=1)
+ self.scvar.set("15")
+
+ # Permutations
+- self.permtext = Tkinter.StringVar()
++ self.permtext = tkinter.StringVar()
+ miscframe.permlab = \
+- Tkinter.Label(miscframe,
++ tkinter.Label(miscframe,
+ textvariable=self.permtext)
+ miscframe.permlab.grid(row=3,column=0,sticky='w')
+ self.permtext.set("Permutations")
+
+- self.permvar = Tkinter.StringVar()
++ self.permvar = tkinter.StringVar()
+ miscframe.perm = \
+- Tkinter.Entry(miscframe,
++ tkinter.Entry(miscframe,
+ textvariable=self.permvar,
+ width=8)
+ miscframe.perm.grid(row=3,column=1)
+ self.permvar.set("0")
+
+ # No timestamp
+- self.notimevar = Tkinter.IntVar()
++ self.notimevar = tkinter.IntVar()
+ miscframe.notime = \
+- Tkinter.Checkbutton(miscframe,
+- text=u"No timestamp",
++ tkinter.Checkbutton(miscframe,
++ text="No timestamp",
+ onvalue=1,
+ offvalue=0,
+ variable=self.notimevar)
+ miscframe.notime.grid(row=5,column=0,sticky='w')
+
+ # Write tree
+- self.writetreevar = Tkinter.IntVar()
++ self.writetreevar = tkinter.IntVar()
+ miscframe.writetree = \
+- Tkinter.Checkbutton(miscframe,
+- text=u"Write tree",
++ tkinter.Checkbutton(miscframe,
++ text="Write tree",
+ onvalue=1,
+ offvalue=0,
+ variable=self.writetreevar)
+ miscframe.writetree.grid(row=6,column=0,sticky='w')
+
+ # No_pairwise
+- self.nopairwisevar = Tkinter.IntVar()
++ self.nopairwisevar = tkinter.IntVar()
+ miscframe.nopairwise = \
+- Tkinter.Checkbutton(miscframe,
+- text=u"No pairwise",
++ tkinter.Checkbutton(miscframe,
++ text="No pairwise",
+ onvalue=1,
+ offvalue=0,
+ variable=self.nopairwisevar)
+ miscframe.nopairwise.grid(row=7,column=0,sticky='w')
+
+ # Collapse
+- self.collapsevar = Tkinter.IntVar()
++ self.collapsevar = tkinter.IntVar()
+ miscframe.collapse = \
+- Tkinter.Checkbutton(miscframe,
+- text=u"Collapse corr",
++ tkinter.Checkbutton(miscframe,
++ text="Collapse corr",
+ onvalue=1,
+ offvalue=0,
+ variable=self.collapsevar)
+@@ -410,59 +410,59 @@ class ScoaryGUI(Tkinter.Tk):
+
+ # Add p-value checkboxes
+
+- self.naivetext = Tkinter.StringVar()
+- self.pVar = Tkinter.IntVar()
++ self.naivetext = tkinter.StringVar()
++ self.pVar = tkinter.IntVar()
+ self.pVar.set(1)
+- self.pBVar = Tkinter.IntVar()
+- self.pBHVar = Tkinter.IntVar()
+- self.pstext = Tkinter.StringVar()
+- self.pPWVar = Tkinter.IntVar()
+- self.pEPWVar = Tkinter.IntVar()
++ self.pBVar = tkinter.IntVar()
++ self.pBHVar = tkinter.IntVar()
++ self.pstext = tkinter.StringVar()
++ self.pPWVar = tkinter.IntVar()
++ self.pEPWVar = tkinter.IntVar()
+ self.pEPWVar.set(1)
+- self.pPermVar = Tkinter.IntVar()
++ self.pPermVar = tkinter.IntVar()
+
+ pframe.naivelab = \
+- Tkinter.Label(pframe,
++ tkinter.Label(pframe,
+ textvariable=self.naivetext)
+- self.naivetext.set(u"Pop structure-naive filters")
++ self.naivetext.set("Pop structure-naive filters")
+ pframe.pNcheck = \
+- Tkinter.Checkbutton(pframe,
+- text=u"Naive (Fisher's)",
++ tkinter.Checkbutton(pframe,
++ text="Naive (Fisher's)",
+ onvalue=1,
+ offvalue=0,
+ variable=self.pVar)
+ pframe.pBcheck = \
+- Tkinter.Checkbutton(pframe,
+- text=u"Bonferroni",
++ tkinter.Checkbutton(pframe,
++ text="Bonferroni",
+ onvalue=1,
+ offvalue=0,
+ variable=self.pBVar)
+ pframe.pBHcheck = \
+- Tkinter.Checkbutton(
++ tkinter.Checkbutton(
+ pframe,
+- text=u"Benjamini-Hochberg",
++ text="Benjamini-Hochberg",
+ onvalue=1,
+ offvalue=0,
+ variable=self.pBHVar)
+ pframe.pslab = \
+- Tkinter.Label(pframe,
++ tkinter.Label(pframe,
+ textvariable=self.pstext)
+- self.pstext.set(u"Pop structure-aware filters")
++ self.pstext.set("Pop structure-aware filters")
+ pframe.pPWcheck = \
+- Tkinter.Checkbutton(pframe,
+- text=u"Pairwise comparison (Best)",
++ tkinter.Checkbutton(pframe,
++ text="Pairwise comparison (Best)",
+ onvalue=1,
+ offvalue=0,
+ variable=self.pPWVar)
+ pframe.pEPWcheck = \
+- Tkinter.Checkbutton(pframe,
+- text=u"Pairwise comparison (Entire)",
++ tkinter.Checkbutton(pframe,
++ text="Pairwise comparison (Entire)",
+ onvalue=1,
+ offvalue=0,
+ variable=self.pEPWVar)
+ pframe.pPermcheck = \
+- Tkinter.Checkbutton(pframe,
+- text=u"Empirical p-value (Permutation)",
++ tkinter.Checkbutton(pframe,
++ text="Empirical p-value (Permutation)",
+ onvalue=1,
+ offvalue=0,
+ variable=self.pPermVar)
+@@ -478,29 +478,29 @@ class ScoaryGUI(Tkinter.Tk):
+
+ # Add p-value entry cells
+
+- self.pNaive = Tkinter.StringVar()
+- self.pBonf = Tkinter.StringVar()
+- self.pBH = Tkinter.StringVar()
+- self.pPW = Tkinter.StringVar()
+- self.pEPW = Tkinter.StringVar()
+- self.pPerm = Tkinter.StringVar()
++ self.pNaive = tkinter.StringVar()
++ self.pBonf = tkinter.StringVar()
++ self.pBH = tkinter.StringVar()
++ self.pPW = tkinter.StringVar()
++ self.pEPW = tkinter.StringVar()
++ self.pPerm = tkinter.StringVar()
+
+- pframe.pNaiveEntry = Tkinter.Entry(pframe,
++ pframe.pNaiveEntry = tkinter.Entry(pframe,
+ textvariable=self.pNaive,
+ width=8)
+- pframe.pBonfEntry = Tkinter.Entry(pframe,
++ pframe.pBonfEntry = tkinter.Entry(pframe,
+ textvariable=self.pBonf,
+ width=8)
+- pframe.pBHEntry = Tkinter.Entry(pframe,
++ pframe.pBHEntry = tkinter.Entry(pframe,
+ textvariable=self.pBH,
+ width=8)
+- pframe.pPWEntry = Tkinter.Entry(pframe,
++ pframe.pPWEntry = tkinter.Entry(pframe,
+ textvariable=self.pPW,
+ width=8)
+- pframe.pEPWEntry = Tkinter.Entry(pframe,
++ pframe.pEPWEntry = tkinter.Entry(pframe,
+ textvariable=self.pEPW,
+ width=8)
+- pframe.pPermEntry = Tkinter.Entry(pframe,
++ pframe.pPermEntry = tkinter.Entry(pframe,
+ textvariable=self.pPerm,
+ width=8)
+
+@@ -524,9 +524,9 @@ class ScoaryGUI(Tkinter.Tk):
+ """
+ Placeholder button. Planned short information about the method
+ """
+- topwin = Tkinter.Toplevel(self)
++ topwin = tkinter.Toplevel(self)
+ button = \
+- Tkinter.Button(topwin,
++ tkinter.Button(topwin,
+ text=str("https://github.com/AdmiralenOla/Scoary"))
+ button.pack()
+
+@@ -535,7 +535,7 @@ class ScoaryGUI(Tkinter.Tk):
+ Browse button for gene presence absence field
+ """
+ myfile = \
+- tkFileDialog.askopenfilename(
++ tkinter.filedialog.askopenfilename(
+ filetypes=[('comma-separated values', '.csv'),
+ ('all files','.*')])
+ self.GPAentryVariable.set(myfile)
+@@ -545,7 +545,7 @@ class ScoaryGUI(Tkinter.Tk):
+ Browse button for traits field
+ """
+ myfile = \
+- tkFileDialog.askopenfilename(
++ tkinter.filedialog.askopenfilename(
+ filetypes=[('comma-separated values', '.csv'),
+ ('all files','.*')])
+ self.TraitsentryVariable.set(myfile)
+@@ -555,7 +555,7 @@ class ScoaryGUI(Tkinter.Tk):
+ Browse button for tree field
+ """
+ myfile = \
+- tkFileDialog.askopenfilename(
++ tkinter.filedialog.askopenfilename(
+ filetypes=[('newick tree files', '.nwk'),
+ ('all files','.*')])
+ self.TreeentryVariable.set(myfile)
+@@ -565,7 +565,7 @@ class ScoaryGUI(Tkinter.Tk):
+ Browse button for isolate restriction field
+ """
+ myfile = \
+- tkFileDialog.askopenfilename(
++ tkinter.filedialog.askopenfilename(
+ filetypes=[('comma-separated values','.csv'),
+ ('all files','.*')])
+ self.RestrictVariable.set(myfile)
+@@ -574,7 +574,7 @@ class ScoaryGUI(Tkinter.Tk):
+ """
+ Browse button for choosing output dir
+ """
+- mydir = tkFileDialog.askdirectory(mustexist=True)
++ mydir = tkinter.filedialog.askdirectory(mustexist=True)
+ self.Outputdir.set(mydir)
+
+ def HelpButton(self):
+@@ -790,7 +790,7 @@ class ScoaryGUI(Tkinter.Tk):
+ if str(SE) == "0":
+ print("Analysis complete!")
+ else:
+- print("Fatal error: %s" % str(SE))
++ print(("Fatal error: %s" % str(SE)))
+
+ # Listen to stdout and update statusbar
+
+@@ -800,7 +800,7 @@ class ScoaryGUI(Tkinter.Tk):
+ """
+ Initialize logo
+ """
+- photo=Tkinter.PhotoImage(data=self.Photobase64())
++ photo=tkinter.PhotoImage(data=self.Photobase64())
+ self.logocanvas.img = photo
+ self.logocanvas.create_image(0,0,anchor='nw',image=photo)
+
+@@ -946,7 +946,7 @@ class ScoaryGUI(Tkinter.Tk):
+ """
+ return photo
+
+-class StdoutToLabel(Tkinter.Label):
++class StdoutToLabel(tkinter.Label):
+ """
+ The special widget that listens to sys.stdout and updates its
+ label accordingly. This widget also owns the progressbar it is
+@@ -956,7 +956,7 @@ class StdoutToLabel(Tkinter.Label):
+ """
+
+ def __init__(self, widget, progressbar=None, width='default'):
+- Tkinter.Label.__init__(self)
++ tkinter.Label.__init__(self)
+ self.defstdout = sys.stdout
+ self.widget = widget
+ self.progressbar = progressbar
+--- a/scoary/classes.py
++++ b/scoary/classes.py
+@@ -76,7 +76,7 @@ class Matrix:
+ self.undef = sys.maxsize
+ self.dim = int(dim)
+ self.data = []
+- for i in xrange(self.dim):
++ for i in range(self.dim):
+ self.data.append(self.dim * [elm])
+
+ def __getitem__(self, i):
+@@ -87,8 +87,8 @@ class Matrix:
+
+ def __str__(self):
+ s = ""
+- for i in xrange(self.dim):
+- for j in xrange(self.dim):
++ for i in range(self.dim):
++ for j in range(self.dim):
+ s += str(self.data[i][j]) + " "
+ s += "\n"
+ return s.strip("\n")
+@@ -106,7 +106,7 @@ class QuadTree:
+ self.dim = dim
+ n = self.dim + self.dim % 2
+ if names is None:
+- names = [str(x) for x in xrange(dim)]
++ names = [str(x) for x in range(dim)]
+ self.names = names
+ self.level = []
+ while n > 1:
+@@ -129,7 +129,7 @@ class QuadTree:
+ if len(curr_row) % 2 == 1:
+ curr_row.append(self.undef)
+ next_row = []
+- for j in xrange(len(curr_row)):
++ for j in range(len(curr_row)):
+ l[i][j] = curr_row[j]
+ if j % 2 == 1:
+ next_row.append(self.quad_min(i, j, l))
+@@ -145,7 +145,7 @@ class QuadTree:
+ if len(curr_col) % 2 == 1:
+ curr_col.append(self.undef)
+ next_col = []
+- for i in xrange(len(curr_col)):
++ for i in range(len(curr_col)):
+ l[i][j] = curr_col[i]
+ if i % 2 == 1:
+ next_col.append(self.quad_min(i, j, l))
+@@ -588,8 +588,8 @@ class Tip:
+ self.maxvalues[condition] = 0
+ else:
+ self.maxvalues[condition] = -1
+- self.max_propairs = {k: v for (k, v) in self.maxvalues.items()}
+- self.max_antipairs = {k: v for (k, v) in self.maxvalues.items()}
++ self.max_propairs = {k: v for (k, v) in list(self.maxvalues.items())}
++ self.max_antipairs = {k: v for (k, v) in list(self.maxvalues.items())}
+
+ if __name__ == '__main__':
+ pass
+--- a/scoary/methods.py
++++ b/scoary/methods.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python3
+ # -*- coding: utf-8 -*-
+
+ # Script for associating Roary output with phenotypic trait (+/-)
+@@ -380,7 +380,7 @@ def Csv_to_dic_Roary(genefile, delimiter
+
+ # Move forwards from startcol to find correct startcol
+ if strains[0] in Roarycols and roaryfile:
+- for c in xrange(len(strains)):
++ for c in range(len(strains)):
+ if strains[c] not in Roarycols:
+ correctstartcol = startcol + c
+ break
+@@ -397,7 +397,7 @@ def Csv_to_dic_Roary(genefile, delimiter
+ Firstcols = header[:startcol][::-1]
+ minus = 0
+ Censored_isolates = []
+- for c in xrange(len(Firstcols)):
++ for c in range(len(Firstcols)):
+ if Firstcols[c] not in Roarycols:
+ minus += 1
+ Censored_isolates.append(Firstcols[c])
+@@ -415,7 +415,7 @@ def Csv_to_dic_Roary(genefile, delimiter
+
+ if allowed_isolates is not None:
+ strain_names_allowed = [val for val in strains
+- if val in allowed_isolates.keys()]
++ if val in list(allowed_isolates.keys())]
+ else:
+ strain_names_allowed = strains
+
+@@ -469,9 +469,9 @@ def Csv_to_dic_Roary(genefile, delimiter
+ # between strains.
+ zero_ones_line = []
+
+- for strain in xrange(len(strains)):
++ for strain in range(len(strains)):
+ if (allowed_isolates is not None):
+- if strains[strain] not in allowed_isolates.keys():
++ if strains[strain] not in list(allowed_isolates.keys()):
+ continue
+ if q[startcol + strain] in ["", "0", "-"]:
+ # If the gene is not present, AND The isolate is allowed
+@@ -499,7 +499,7 @@ def Csv_to_dic_Roary(genefile, delimiter
+ # Transpose list for distance calculation purposes
+ if writereducedset:
+ file.close()
+- zero_ones_matrix = list(map(list, zip(*zero_ones_matrix)))
++ zero_ones_matrix = list(map(list, list(zip(*zero_ones_matrix))))
+
+ return {"Roarydic": r,
+ "Zero_ones_matrix": zero_ones_matrix,
+@@ -520,8 +520,8 @@ def ReduceSet(genefile, delimiter, grabc
+ delimiter=delimiter)
+ header = next(csvfile)
+ allowed_indexes = list(range(startcol))
+- for c in xrange(len(header)):
+- if header[c] in allowed_isolates.keys():
++ for c in range(len(header)):
++ if header[c] in list(allowed_isolates.keys()):
+ allowed_indexes.append(c)
+
+ log.info("Writing gene presence absence file for the reduced set of "
+@@ -556,8 +556,8 @@ def Csv_to_dic(csvfile, delimiter, allow
+ if len(tab) < 2:
+ sys.exit("Please check that your traits file is formatted "
+ "properly and contains at least one trait")
+- for num_trait in xrange(1, len(tab)):
+- p = dict(zip(tab[0], tab[num_trait]))
++ for num_trait in range(1, len(tab)):
++ p = dict(list(zip(tab[0], tab[num_trait])))
+ if "" in p:
+ name_trait = p[""]
+ del p[""]
+@@ -571,26 +571,26 @@ def Csv_to_dic(csvfile, delimiter, allow
+ # Filter so that only allowed isolates are included
+ if allowed_isolates is not None:
+ p = {strain: indicator for (strain, indicator) in
+- list(p.items()) if strain in allowed_isolates.keys()}
++ list(p.items()) if strain in list(allowed_isolates.keys())}
+ # Stop if unknown character found in traits file
+ allowed_values = ["0","1","NA",".","-"," ",""]
+- if not all([x in allowed_values for x in p.values()]):
++ if not all([x in allowed_values for x in list(p.values())]):
+ sys.exit("Unrecognized character found in trait file. Allowed "
+ "values (no commas): %s" % str(",".join(allowed_values)))
+ # Remove isolates with missing values, but only for the
+ # trait for which they are missing
+- if ("NA" in p.values()
+- or "-" in p.values()
+- or "." in p.values()
+- or " " in p.values()
+- or "" in p.values()):
++ if ("NA" in list(p.values())
++ or "-" in list(p.values())
++ or "." in list(p.values())
++ or " " in list(p.values())
++ or "" in list(p.values())):
+ log.warning("WARNING: Some isolates have missing values for "
+ "trait %s. Missing-value isolates will not be counted in "
+ "association analysis towards this trait."
+ % str(name_trait))
+ p_filt = {strain: indicator for (strain, indicator) in
+- p.items() if indicator not in ["NA","-","."," ",""]}
+- Prunedic[name_trait] = [k for (k,v) in p.items() if
++ list(p.items()) if indicator not in ["NA","-","."," ",""]}
++ Prunedic[name_trait] = [k for (k,v) in list(p.items()) if
+ v in ["NA","-","."," ",""]]
+ #p = p_filt
+ else:
+@@ -599,14 +599,14 @@ def Csv_to_dic(csvfile, delimiter, allow
+ # Remove isolates that did not have rows in the trait file but
+ # that were allowed by the GPA file/restrict_to
+ #if not all(s in p.keys() for s in strains):
+- if not all(s in p.keys() for s in strains):
++ if not all(s in list(p.keys()) for s in strains):
+ log.error("ERROR: Some isolates in your gene presence "
+ "absence file were not represented in your traits file. "
+ "These will count as MISSING data and will not be included."
+ )
+
+ Prunedic[name_trait] += [s for s in strains if
+- s not in p.keys() and
++ s not in list(p.keys()) and
+ s not in Prunedic[name_trait]]
+ r[name_trait] = p_filt
+ Prunedic[name_trait] += [None]
+@@ -632,7 +632,7 @@ def CreateTriangularDistanceMatrix(zeroo
+ nstrains = int((1 + (1 + 8*len(hamming_distances))**0.5)/2)
+ TriangularDistanceMatrix = []
+ Strain_names = []
+- for i in xrange(nstrains):
++ for i in range(nstrains):
+ # Adding the maximum relative hamming distance to prevent
+ # Quadtree algorithm to pick a pair where i = j
+ add = [1]
+@@ -650,8 +650,8 @@ def PopulateQuadTreeWithDistances(TDM):
+ First creates a Quadmatrix, so not really optimized.
+ """
+ Quadmatrix = Matrix(dim=len(TDM["matrix"]))
+- for i in xrange(Quadmatrix.dim):
+- for j in xrange(i, Quadmatrix.dim):
++ for i in range(Quadmatrix.dim):
++ for j in range(i, Quadmatrix.dim):
+ try:
+ Quadmatrix[i][j] = \
+ Quadmatrix[j][i] = TDM["matrix"][i][(j-i)]
+@@ -660,7 +660,7 @@ def PopulateQuadTreeWithDistances(TDM):
+ "Quadtree with pairwise distances. Please "
+ "report this bug to olbb at fhi.no")
+ PopulatedQuadtree = QuadTree(Quadmatrix.dim, names=TDM["names"])
+- for i in xrange(Quadmatrix.dim):
++ for i in range(Quadmatrix.dim):
+ PopulatedQuadtree.insert_row(i, Quadmatrix[i])
+ return PopulatedQuadtree
+
+@@ -683,7 +683,7 @@ def upgma(d):
+ new_cluster = [cluster[i], cluster[j]]
+ new_size = size[i] + size[j]
+ new_dist = []
+- for k in xrange(d.dim):
++ for k in range(d.dim):
+ if cluster[k] is None:
+ new_dist.append(1)
+ else:
+@@ -906,7 +906,7 @@ def Setup_results(genedic, traitsdic, co
+ # Note: Changed from step-down to step-up
+ # (from least significant to most significant)
+ tie = [s_p_v[i-1][1] == s_p_v[i][1] for i in
+- xrange(1, len(s_p_v))]
++ range(1, len(s_p_v))]
+ # Initialize dics of corrected p values
+ # bh_c_p_v = abbreviation for bh_corrected_p_values
+ bh_c_p_v = {}
+@@ -1074,8 +1074,8 @@ def StoreTraitResult(Trait, Traitname, m
+ # results list
+
+ if multithreaded:
+- domains = [list(xrange(tnum, num_results, num_threads))
+- for tnum in xrange(num_threads)]
++ domains = [list(range(tnum, num_results, num_threads))
++ for tnum in range(num_threads)]
+ # The Progress variable holds the total progress status of
+ # the subprocesses. It is locked, but can be written to by
+ # all subprocs
+@@ -1089,14 +1089,14 @@ def StoreTraitResult(Trait, Traitname, m
+ # Need to make a copy of dict to prevent then from pointing
+ # to the same object
+ all_args = [ (domains[x], dict(argumentlist))
+- for x in xrange(len(domains)) ]
++ for x in range(len(domains)) ]
+
+ Threadresults = pool.imap(PairWiseComparisons,all_args)
+
+ pool.close()
+ pool.join()
+ else:
+- domains = list(xrange(num_results))
++ domains = list(range(num_results))
+ argumentlist = {"si":sort_instructions,"tree":upgmatree,
+ "GTC": GTC[Traitname],"cutoffs": cutoffs,
+ "cp": cut_possibilities,"perm":permutations,
+@@ -1115,7 +1115,7 @@ def StoreTraitResult(Trait, Traitname, m
+ Filteredresults = {}
+ Threadresults = list(Threadresults)
+
+- for thread in xrange(num_threads):
++ for thread in range(num_threads):
+ for currentgene in Threadresults[thread]:
+ Filteredresults[currentgene] = \
+ Threadresults[thread][currentgene]
+@@ -1141,7 +1141,7 @@ def StoreTraitResult(Trait, Traitname, m
+
+ log.info("Storing results to file")
+ num_filteredresults = min(num_results, len(Filteredresults))
+- for x in xrange(num_filteredresults):
++ for x in range(num_filteredresults):
+ currentgene = sort_instructions[x]
+
+ # Final check that the currentgene passes all filters
+@@ -1345,7 +1345,7 @@ def Permute(tree, GTC, permutations, cut
+ proceed = False
+
+ if proceed:
+- for i in xrange(permutations):
++ for i in range(permutations):
+ # Make a permutation using random.shuffle
+ PermutedGTC = PermuteGTC(GTCcopy)
+ # Send new set to phylotree
+@@ -1374,7 +1374,7 @@ def PermuteGTC(GTC):
+ labels have been swapped
+ """
+ # Set of trait labels to distribute
+- trait_labels = [s[-1] for s in GTC.values()]
++ trait_labels = [s[-1] for s in list(GTC.values())]
+ # Shuffle list of labels
+ random.shuffle(trait_labels)
+ for isolate in GTC:
+@@ -1480,7 +1480,7 @@ def filtrationoptions(cutoffs, collapse)
+ "EPW": "Pairwise comparison (Entire range)",
+ "P": "Empirical p-value (permutation-based)"}
+ filters = [str(translation[k]) + ": " + str(v)
+- for k,v in cutoffs.items()]
++ for k,v in list(cutoffs.items())]
+ filters.append("Collapse genes: " + str(collapse) + "\n\n")
+ filters = ["-- Filtration options --"] + filters
+
+@@ -1528,7 +1528,7 @@ def grabcoltype(string):
+ bydash = s.split("-")
+ if not (int(bydash[1]) > int(bydash[0])):
+ raise
+- add = range(int(bydash[0]), int(bydash[1]))
++ add = list(range(int(bydash[0]), int(bydash[1])))
+ returnlist += list(add)
+ except:
+ sys.exit("Could not understand --include_input_columns "
+--- a/scoary/vcf2scoary.py
++++ b/scoary/vcf2scoary.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python3
+ # -*- coding: utf-8 -*-
+
+ # Script to search vcf files for mutations within specific coordinates
+@@ -116,7 +116,7 @@ def main():
+ try:
+ line = next(lines)
+ except StopIteration:
+- print(traceback.print_exc())
++ print((traceback.print_exc()))
+ sys.exit("ERROR: There appears to be only metainformation "
+ "(lines starting with ##) in your VCF file.")
+ # Get metainfo from file
+@@ -145,11 +145,11 @@ def main():
+ print("WARNING: A VCF format other than 4.x detected."
+ " File parsing may proceed with errors.")
+ else:
+- print("VCF version %s detected" % vcfversion)
++ print(("VCF version %s detected" % vcfversion))
+ except:
+ print("WARNING: Could not detect VCF format. Expected "
+ "v4.x. File parsing may proceed with errors.")
+- print(traceback.print_exc())
++ print((traceback.print_exc()))
+
+ # Check that genotype fields have a single allele
+ if metainfo["##FORMAT"]["GT"]["Number"] != "1":
+@@ -213,7 +213,7 @@ def fixdummy(line,c):
+ else:
+ newline[x] = "0"
+ except ValueError:
+- print(newline, c)
++ print((newline, c))
+ sys.exit(-1)
+ return newline
+
+--- a/tests/test_scoary_output.py
++++ b/tests/test_scoary_output.py
+@@ -30,94 +30,94 @@ for Test in ["1","2","4"]:
+ try:
+ assert data[0] == reference[0]
+ except AssertionError:
+- print("Not equal at Test %s col 0: %s %s" % (Test, data[0], reference[0]))
++ print(("Not equal at Test %s col 0: %s %s" % (Test, data[0], reference[0])))
+ sys.exit(-1)
+ try:
+ assert data[1] == reference[1]
+ except AssertionError:
+- print("Not equal at Test %s col 1: %s %s" % (Test, data[1], reference[1]))
++ print(("Not equal at Test %s col 1: %s %s" % (Test, data[1], reference[1])))
+ sys.exit(-1)
+ try:
+ assert data[2] == reference[2]
+ except AssertionError:
+- print("Not equal at Test %s col 2: %s %s" % (Test, data[2], reference[2]))
++ print(("Not equal at Test %s col 2: %s %s" % (Test, data[2], reference[2])))
+ sys.exit(-1)
+ try:
+ assert int(data[3]) == reference[3]
+ except AssertionError:
+- print("Not equal at Test %s col 3: %s %s" % (Test, data[3], str(reference[3])))
++ print(("Not equal at Test %s col 3: %s %s" % (Test, data[3], str(reference[3]))))
+ sys.exit(-1)
+ try:
+ assert int(data[4]) == reference[4]
+ except AssertionError:
+- print("Not equal at Test %s col 4: %s %s" % (Test, data[4], str(reference[4])))
++ print(("Not equal at Test %s col 4: %s %s" % (Test, data[4], str(reference[4]))))
+ sys.exit(-1)
+ try:
+ assert int(data[5]) == reference[5]
+ except AssertionError:
+- print("Not equal at Test %s col 5: %s %s" % (Test, data[5], str(reference[5])))
++ print(("Not equal at Test %s col 5: %s %s" % (Test, data[5], str(reference[5]))))
+ sys.exit(-1)
+ try:
+ assert int(data[6]) == reference[6]
+ except AssertionError:
+- print("Not equal at Test %s col 6: %s %s" % (Test, data[6], str(reference[6])))
++ print(("Not equal at Test %s col 6: %s %s" % (Test, data[6], str(reference[6]))))
+ sys.exit(-1)
+ try:
+ assert abs(float(data[7]) - reference[7]) <= 0.01
+ except AssertionError:
+- print("Not equal at Test %s col 7: %s %s" % (Test, data[7], str(reference[7])))
++ print(("Not equal at Test %s col 7: %s %s" % (Test, data[7], str(reference[7]))))
+ sys.exit(-1)
+ try:
+ assert abs(float(data[8]) - reference[8]) <= 0.01
+ except AssertionError:
+- print("Not equal at Test %s col 8: %s %s" % (Test, data[8], str(reference[8])))
++ print(("Not equal at Test %s col 8: %s %s" % (Test, data[8], str(reference[8]))))
+ sys.exit(-1)
+ try:
+ assert abs(float(data[9]) - reference[9]) <= 0.1
+ except AssertionError:
+- print("Not equal at Test %s col 9: %s %s" % (Test, data[9], str(reference[9])))
++ print(("Not equal at Test %s col 9: %s %s" % (Test, data[9], str(reference[9]))))
+ sys.exit(-1)
+ try:
+ assert abs(float(data[10]) - reference[10]) <= 1E-15
+ except AssertionError:
+- print("Not equal at Test %s col 10: %s %s" % (Test, data[10], str(reference[10])))
++ print(("Not equal at Test %s col 10: %s %s" % (Test, data[10], str(reference[10]))))
+ sys.exit(-1)
+ try:
+ assert abs(float(data[11]) - reference[11]) <= 1E-12
+ except AssertionError:
+- print("Not equal at Test %s col 11: %s %s" % (Test, data[11], str(reference[11])))
++ print(("Not equal at Test %s col 11: %s %s" % (Test, data[11], str(reference[11]))))
+ sys.exit(-1)
+ try:
+ assert abs(float(data[12]) - reference[12]) <= 1E-12
+ except AssertionError:
+- print("Not equal at Test %s col 12: %s %s" % (Test, data[12], str(reference[12])))
++ print(("Not equal at Test %s col 12: %s %s" % (Test, data[12], str(reference[12]))))
+ sys.exit(-1)
+
+ if not Test == "2":
+ try:
+ assert int(data[13]) == reference[13]
+ except AssertionError:
+- print("Not equal at Test %s col 13: %s %s" % (Test, data[13], str(reference[13])))
++ print(("Not equal at Test %s col 13: %s %s" % (Test, data[13], str(reference[13]))))
+ sys.exit(-1)
+ try:
+ assert int(data[14]) == reference[14]
+ except AssertionError:
+- print("Not equal at Test %s col 14: %s %s" % (Test, data[14], str(reference[14])))
++ print(("Not equal at Test %s col 14: %s %s" % (Test, data[14], str(reference[14]))))
+ sys.exit(-1)
+ try:
+ assert int(data[15]) == reference[15]
+ except AssertionError:
+- print("Not equal at Test %s col 15: %s %s" % (Test, data[15], str(reference[15])))
++ print(("Not equal at Test %s col 15: %s %s" % (Test, data[15], str(reference[15]))))
+ sys.exit(-1)
+ try:
+ assert abs(float(data[16]) - reference[16]) <= 1E-9
+ except AssertionError:
+- print("Not equal at Test %s col 16: %s %s" % (Test, data[16], str(reference[16])))
++ print(("Not equal at Test %s col 16: %s %s" % (Test, data[16], str(reference[16]))))
+ sys.exit(-1)
+ try:
+ assert abs(float(data[17]) - reference[17]) <= 1E-7
+ except AssertionError:
+- print("Not equal at Test %s col 17: %s %s" % (Test, data[17], str(reference[17])))
++ print(("Not equal at Test %s col 17: %s %s" % (Test, data[17], str(reference[17]))))
+ sys.exit(-1)
+
+ with open(os.getcwd() + "/mutations_presence_absence.csv" ,"rU") as vcfresfile:
+@@ -130,8 +130,8 @@ with open(os.getcwd() + "/mutations_pres
+ try:
+ assert data == referencevcf
+ except AssertionError:
+- print("Got: %s" % ",".join(data))
+- print("Expected: %s" % ",".join(referencevcf))
++ print(("Got: %s" % ",".join(data)))
++ print(("Expected: %s" % ",".join(referencevcf)))
+ print("VCF conversion did not produce the expected output")
+ sys.exit(-1)
+
=====================================
debian/patches/series
=====================================
@@ -0,0 +1 @@
+2to3.patch
=====================================
debian/rules
=====================================
@@ -4,7 +4,7 @@
export LC_ALL = C.UTF-8
%:
- dh $@ --with python2 --buildsystem=pybuild
+ dh $@ --with python3 --buildsystem=pybuild
override_dh_auto_test:
ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
View it on GitLab: https://salsa.debian.org/med-team/scoary/compare/902691ea72f00079155953988bae8a0b3103aa0f...f635c072de0321d257461571177818af056c4822
--
View it on GitLab: https://salsa.debian.org/med-team/scoary/compare/902691ea72f00079155953988bae8a0b3103aa0f...f635c072de0321d257461571177818af056c4822
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/20190913/c30e560a/attachment-0001.html>
More information about the debian-med-commit
mailing list