[med-svn] [Git][med-team/cycle][master] Use 2to3 to port to Python3

Andreas Tille gitlab at salsa.debian.org
Fri Sep 6 14:01:11 BST 2019



Andreas Tille pushed to branch master at Debian Med / cycle


Commits:
4409d6a6 by Andreas Tille at 2019-09-06T13:00:57Z
Use 2to3 to port to Python3

- - - - -


3 changed files:

- debian/changelog
- + debian/patches/2to3.patch
- debian/patches/series


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,11 @@
+cycle (0.3.1-15) UNRELEASED; urgency=medium
+
+  * Team upload.
+  * Use 2to3 to port to Python3
+    Closes: #939181
+
+ -- Andreas Tille <tille at debian.org>  Fri, 06 Sep 2019 14:57:13 +0200
+
 cycle (0.3.1-14) unstable; urgency=medium
 
   * Team upload.


=====================================
debian/patches/2to3.patch
=====================================
@@ -0,0 +1,561 @@
+Description: Use 2to3 to port to Python3
+Bug-Debian: https://bugs.debian.org/939181
+Author: Andreas Tille <tille at debian.org>
+Last-Update: Fri, 06 Sep 2019 14:57:13 +0200
+
+--- a/cal_year.py
++++ b/cal_year.py
+@@ -10,6 +10,7 @@ import wx
+ import wx.calendar
+ import calendar
+ import operator
++from functools import reduce
+ 
+ class Val:
+     pass
+@@ -349,7 +350,7 @@ def min_max(i):
+ def calc_fert(year):
+     """    year"""
+ 
+-    for k in cycle.mark.keys():
++    for k in list(cycle.mark.keys()):
+ 	cycle.mark[k]=cycle.mark[k] & ~MARK_FERT &\
+ 	~MARK_OVUL & ~MARK_PROG & ~MARK_SAFESEX & ~MARK_BIRTH &\
+ 	~MARK_T22_28 & ~MARK_NEXT_TABLET
+@@ -406,7 +407,7 @@ def calc_fert(year):
+     cycle.prog_begin=[]
+     d=d+wx.DateSpan.Days( cycle.period )
+     while d.GetYear()<=year:
+-	if cycle.tablet<>[] and cycle.tablet[-1]<=d and \
++	if cycle.tablet!=[] and cycle.tablet[-1]<=d and \
+ 	    cycle.begin[-1]<=cycle.tablet[-1]: return
+ 	if d.GetYear()==year: 
+ 	    #	    cycle.prog_begin.append(d)
+@@ -484,7 +485,7 @@ def reset_mark(year):
+     for k in cycle.tablet:
+ 	if k.GetYear()==year:
+ 	    add_mark(k, MARK_TABLET, year)
+-    for k in cycle.note.keys():
++    for k in list(cycle.note.keys()):
+ 	if str(year)==k[0:4]:
+ 	    d=wx.DateTimeFromDMY(int(k[6:8]), int(k[4:6])-1, int(k[0:4]))
+ 	    add_mark(d, MARK_NOTE, year)
+@@ -494,7 +495,7 @@ def info(day):
+     """     ."""
+ 
+     s=day.Format('%d %B')
+-    if cycle.tablet<>[]:
++    if cycle.tablet!=[]:
+ 	for d in cycle.tablet:
+ 	    if day.IsBetween(d, d+wx.DateSpan.Days(28)):
+ 		t=(day-d+wx.TimeSpan.Hours(1)).GetDays()+1
+@@ -524,7 +525,7 @@ def info(day):
+ 	else:
+ 	    #   
+ 	    while d<=day:
+-		if cycle.tablet<>[] and cycle.tablet[-1]<=d and \
++		if cycle.tablet!=[] and cycle.tablet[-1]<=d and \
+ 		    cycle.begin[-1]<=cycle.tablet[-1]: return s
+ 		d=d+wx.DateSpan.Days(cycle.period)
+ 	    find=2
+@@ -568,17 +569,17 @@ def get_note(date):
+ 
+ def remove_note(date):
+     d=date.Format('%Y%m%d')
+-    if cycle.note.has_key(d):
++    if d in cycle.note:
+ 	del cycle.note[d]
+ 
+ #-------------------- Report --------------------
+ def report_year(year):
+     if cycle.first_week_day == 0:
+ 	calendar.setfirstweekday(calendar.MONDAY)
+-	days = range(1,7) + [0]
++	days = list(range(1,7)) + [0]
+     else:
+ 	calendar.setfirstweekday(calendar.SUNDAY)
+-	days = range(7)
++	days = list(range(7))
+     #sp=' '
+     s='<html><body><H3 align=center>%s</H3><pre>' % year
+     dn = ''
+@@ -620,7 +621,7 @@ def report_year(year):
+     
+ 
+     s+='</pre></body></html>'
+-    print s
++    print(s)
+     return s
+ 
+ def report_year_ical(year, fileobj):
+--- a/cycle.py
++++ b/cycle.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python3
+ # coding: koi8-r
+ #====================================================
+ #	Cycle - calendar for women
+@@ -22,13 +22,13 @@ from set_dir import *
+ #from prn import *
+ 
+ import gettext
+-import __builtin__
++import builtins
+ lang_find=False
+ if not '__WXMSW__' in wx.PlatformInfo:
+     for lang_env_var in ('LANGUAGE', 'LC_ALL', 'LC_CTYPE', 'LANG'):
+ 	if lang_find:
+ 	    break
+-	if os.environ.has_key(lang_env_var):
++	if lang_env_var in os.environ:
+ 	    env_language=os.environ[lang_env_var]
+ 	    for s_lang in env_language.split(':'): # if set more languages
+ 		os.environ[lang_env_var]=s_lang
+@@ -37,9 +37,9 @@ if not '__WXMSW__' in wx.PlatformInfo:
+ 		    lang=[ dl[0][0:2] ]
+ 		    l=gettext.translation('cycle', msg_dir, lang)
+ 		    if wx.USE_UNICODE:
+-			__builtin__.__dict__['_'] = lambda s: l.ugettext(s)
++			builtins.__dict__['_'] = lambda s: l.ugettext(s)
+ 		    else:
+-			__builtin__.__dict__['_'] = lambda s: l.ugettext(s).encode(dl[1])
++			builtins.__dict__['_'] = lambda s: l.ugettext(s).encode(dl[1])
+ 		    _('try decode this string')
+ 		    lang_find=True
+ 		    break #language was found
+@@ -51,16 +51,16 @@ else: #for MS Windows
+         lang=[ dl[0][0:2] ]
+ 	l=gettext.translation('cycle', msg_dir, lang)
+ 	if wx.USE_UNICODE:
+-	    __builtin__.__dict__['_'] = lambda s: l.ugettext(s)
++	    builtins.__dict__['_'] = lambda s: l.ugettext(s)
+ 	else:
+-	    __builtin__.__dict__['_'] = lambda s: l.ugettext(s).encode(dl[1])
++	    builtins.__dict__['_'] = lambda s: l.ugettext(s).encode(dl[1])
+ 	_('try decode this string')
+ 	lang_find=True
+     except:
+         pass
+ 
+ if not lang_find:
+-    __builtin__.__dict__['_'] = lambda s: s
++    builtins.__dict__['_'] = lambda s: s
+     lang=[""]
+ 
+ 
+--- a/dialogs.py
++++ b/dialogs.py
+@@ -14,7 +14,7 @@ warnings.filterwarnings("ignore",
+ import os
+ import wx
+ import wx.html
+-import cPickle
++import pickle
+ from cal_year import cycle , Val
+ from save_load import Load_Cycle, get_f_name, set_color_default
+ from set_dir import *
+@@ -188,8 +188,8 @@ def get_users():
+             if tmp == magic_str:
+                 tmp=fd.read(100)
+                 n=tmp.find("===") #find end string
+-                if n <> -1:
+-                    users.append((cPickle.loads(tmp[:n]), f))
++                if n != -1:
++                    users.append((pickle.loads(tmp[:n]), f))
+                 else: # old format, user_name=file_name
+                     users.append((f,f))
+         #if not users:
+@@ -484,7 +484,7 @@ class Colours_Dlg(wx.Dialog):
+ 	wx.Dialog.__init__(self,parent,-1, _('Colours settings'))
+ 
+ 	self.col_set = cycle.colour_set.copy()
+-	self.col_id = cycle.colour_set.keys()
++	self.col_id = list(cycle.colour_set.keys())
+ 	self.data = wx.ColourData()
+ 	self.data.SetChooseFull(True)
+ 	self.buttons = {}
+--- a/msg/msgfmt.py
++++ b/msg/msgfmt.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python3
+ # -*- coding: iso-8859-1 -*-
+ # Written by Martin v. Lwis <loewis at informatik.hu-berlin.de>
+ 
+@@ -38,9 +38,9 @@ MESSAGES = {}
+ 
+ 
+ def usage(code, msg=''):
+-    print >> sys.stderr, __doc__
++    print(__doc__, file=sys.stderr)
+     if msg:
+-        print >> sys.stderr, msg
++        print(msg, file=sys.stderr)
+     sys.exit(code)
+ 
+ 
+@@ -56,7 +56,7 @@ def add(id, str, fuzzy):
+ def generate():
+     "Return the generated output."
+     global MESSAGES
+-    keys = MESSAGES.keys()
++    keys = list(MESSAGES.keys())
+     # the keys are sorted in the .mo file
+     keys.sort()
+     offsets = []
+@@ -83,7 +83,7 @@ def generate():
+         voffsets += [l2, o2+valuestart]
+     offsets = koffsets + voffsets
+     output = struct.pack("Iiiiiii",
+-                         0x950412deL,       # Magic
++                         0x950412de,       # Magic
+                          0,                 # Version
+                          len(keys),         # # of entries
+                          7*4,               # start of key index
+@@ -110,8 +110,8 @@ def make(filename, outfile):
+ 
+     try:
+         lines = open(infile).readlines()
+-    except IOError, msg:
+-        print >> sys.stderr, msg
++    except IOError as msg:
++        print(msg, file=sys.stderr)
+         sys.exit(1)
+     
+     section = None
+@@ -154,9 +154,9 @@ def make(filename, outfile):
+         elif section == STR:
+             msgstr += l
+         else:
+-            print >> sys.stderr, 'Syntax error on %s:%d' % (infile, lno), \
+-                  'before:'
+-            print >> sys.stderr, l
++            print('Syntax error on %s:%d' % (infile, lno), \
++                  'before:', file=sys.stderr)
++            print(l, file=sys.stderr)
+             sys.exit(1)
+     # Add last entry
+     if section == STR:
+@@ -167,8 +167,8 @@ def make(filename, outfile):
+ 
+     try:
+         open(outfile,"wb").write(output)
+-    except IOError,msg:
+-        print >> sys.stderr, msg
++    except IOError as msg:
++        print(msg, file=sys.stderr)
+                       
+ 
+ 
+@@ -176,7 +176,7 @@ def main():
+     try:
+         opts, args = getopt.getopt(sys.argv[1:], 'hVo:',
+                                    ['help', 'version', 'output-file='])
+-    except getopt.error, msg:
++    except getopt.error as msg:
+         usage(1, msg)
+ 
+     outfile = None
+@@ -185,14 +185,14 @@ def main():
+         if opt in ('-h', '--help'):
+             usage(0)
+         elif opt in ('-V', '--version'):
+-            print >> sys.stderr, "msgfmt.py", __version__
++            print("msgfmt.py", __version__, file=sys.stderr)
+             sys.exit(0)
+         elif opt in ('-o', '--output-file'):
+             outfile = arg
+     # do it
+     if not args:
+-        print >> sys.stderr, 'No input file given'
+-        print >> sys.stderr, "Try `msgfmt --help' for more information."
++        print('No input file given', file=sys.stderr)
++        print("Try `msgfmt --help' for more information.", file=sys.stderr)
+         return
+ 
+     for filename in args:
+--- a/msg/pygettext.py
++++ b/msg/pygettext.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#!/usr/bin/python3
+ # -*- coding: iso-8859-1 -*-
+ # Originally written by Barry Warsaw <barry at zope.com>
+ #
+@@ -164,6 +164,7 @@ import getopt
+ import token
+ import tokenize
+ import operator
++from functools import reduce
+ 
+ __version__ = '1.5'
+ 
+@@ -197,9 +198,9 @@ msgstr ""
+ 
+ 
+ def usage(code, msg=''):
+-    print >> sys.stderr, __doc__ % globals()
++    print(__doc__ % globals(), file=sys.stderr)
+     if msg:
+-        print >> sys.stderr, msg
++        print(msg, file=sys.stderr)
+     sys.exit(code)
+ 
+ 
+@@ -265,7 +266,7 @@ def containsAny(str, set):
+ def _visit_pyfiles(list, dirname, names):
+     """Helper for getFilesForName()."""
+     # get extension for python source files
+-    if not globals().has_key('_py_ext'):
++    if '_py_ext' not in globals():
+         global _py_ext
+         _py_ext = [triple[0] for triple in imp.get_suffixes()
+                    if triple[2] == imp.PY_SOURCE][0]
+@@ -423,13 +424,13 @@ class TokenEater:
+         elif ttype not in [tokenize.COMMENT, token.INDENT, token.DEDENT,
+                            token.NEWLINE, tokenize.NL]:
+             # warn if we see anything else than STRING or whitespace
+-            print >> sys.stderr, _(
++            print(_(
+                 '*** %(file)s:%(lineno)s: Seen unexpected token "%(token)s"'
+                 ) % {
+                 'token': tstring,
+                 'file': self.__curfile,
+                 'lineno': self.__lineno
+-                }
++                }, file=sys.stderr)
+             self.__state = self.__waiting
+ 
+     def __addentry(self, msg, lineno=None, isdocstring=0):
+@@ -448,15 +449,15 @@ class TokenEater:
+         timestamp = time.ctime(time.time())
+         # The time stamp in the header doesn't have the same format as that
+         # generated by xgettext...
+-        print >> fp, pot_header % {'time': timestamp, 'version': __version__}
++        print(pot_header % {'time': timestamp, 'version': __version__}, file=fp)
+         # Sort the entries.  First sort each particular entry's keys, then
+         # sort all the entries by their first item.
+         reverse = {}
+-        for k, v in self.__messages.items():
+-            keys = v.keys()
++        for k, v in list(self.__messages.items()):
++            keys = list(v.keys())
+             keys.sort()
+             reverse.setdefault(tuple(keys), []).append((k, v))
+-        rkeys = reverse.keys()
++        rkeys = list(reverse.keys())
+         rkeys.sort()
+         for rkey in rkeys:
+             rentries = reverse[rkey]
+@@ -466,12 +467,12 @@ class TokenEater:
+                 # If the entry was gleaned out of a docstring, then add a
+                 # comment stating so.  This is to aid translators who may wish
+                 # to skip translating some unimportant docstrings.
+-                if reduce(operator.__add__, v.values()):
++                if reduce(operator.__add__, list(v.values())):
+                     isdocstring = 1
+                 # k is the message string, v is a dictionary-set of (filename,
+                 # lineno) tuples.  We want to sort the entries in v first by
+                 # file name and then by line number.
+-                v = v.keys()
++                v = list(v.keys())
+                 v.sort()
+                 if not options.writelocations:
+                     pass
+@@ -479,8 +480,8 @@ class TokenEater:
+                 elif options.locationstyle == options.SOLARIS:
+                     for filename, lineno in v:
+                         d = {'filename': filename, 'lineno': lineno}
+-                        print >>fp, _(
+-                            '# File: %(filename)s, line: %(lineno)d') % d
++                        print(_(
++                            '# File: %(filename)s, line: %(lineno)d') % d, file=fp)
+                 elif options.locationstyle == options.GNU:
+                     # fit as many locations on one line, as long as the
+                     # resulting line length doesn't exceeds 'options.width'
+@@ -491,14 +492,14 @@ class TokenEater:
+                         if len(locline) + len(s) <= options.width:
+                             locline = locline + s
+                         else:
+-                            print >> fp, locline
++                            print(locline, file=fp)
+                             locline = "#:" + s
+                     if len(locline) > 2:
+-                        print >> fp, locline
++                        print(locline, file=fp)
+                 if isdocstring:
+-                    print >> fp, '#, docstring'
+-                print >> fp, 'msgid', normalize(k)
+-                print >> fp, 'msgstr ""\n'
++                    print('#, docstring', file=fp)
++                print('msgid', normalize(k), file=fp)
++                print('msgstr ""\n', file=fp)
+ 
+ 
+ 
+@@ -514,7 +515,7 @@ def main():
+              'style=', 'verbose', 'version', 'width=', 'exclude-file=',
+              'docstrings', 'no-docstrings',
+              ])
+-    except getopt.error, msg:
++    except getopt.error as msg:
+         usage(1, msg)
+ 
+     # for holding option values
+@@ -572,7 +573,7 @@ def main():
+         elif opt in ('-v', '--verbose'):
+             options.verbose = 1
+         elif opt in ('-V', '--version'):
+-            print _('pygettext.py (xgettext for Python) %s') % __version__
++            print(_('pygettext.py (xgettext for Python) %s') % __version__)
+             sys.exit(0)
+         elif opt in ('-w', '--width'):
+             try:
+@@ -605,8 +606,8 @@ def main():
+             options.toexclude = fp.readlines()
+             fp.close()
+         except IOError:
+-            print >> sys.stderr, _(
+-                "Can't read --exclude-file: %s") % options.excludefilename
++            print(_(
++                "Can't read --exclude-file: %s") % options.excludefilename, file=sys.stderr)
+             sys.exit(1)
+     else:
+         options.toexclude = []
+@@ -625,21 +626,21 @@ def main():
+     for filename in args:
+         if filename == '-':
+             if options.verbose:
+-                print _('Reading standard input')
++                print(_('Reading standard input'))
+             fp = sys.stdin
+             closep = 0
+         else:
+             if options.verbose:
+-                print _('Working on %s') % filename
++                print(_('Working on %s') % filename)
+             fp = open(filename)
+             closep = 1
+         try:
+             eater.set_filename(filename)
+             try:
+                 tokenize.tokenize(fp.readline, eater)
+-            except tokenize.TokenError, e:
+-                print >> sys.stderr, '%s: %s, line %d, column %d' % (
+-                    e[0], filename, e[1][0], e[1][1])
++            except tokenize.TokenError as e:
++                print('%s: %s, line %d, column %d' % (
++                    e[0], filename, e[1][0], e[1][1]), file=sys.stderr)
+         finally:
+             if closep:
+                 fp.close()
+@@ -663,7 +664,7 @@ def main():
+ if __name__ == '__main__':
+     main()
+     # some more test strings
+-    _(u'a unicode string')
++    _('a unicode string')
+     # this one creates a warning
+     _('*** Seen unexpected token "%(token)s"') % {'token': 'test'}
+     _('more' 'than' 'one' 'string')
+--- a/p_rotor.py
++++ b/p_rotor.py
+@@ -80,11 +80,11 @@ class newrotor(object):
+         for c in map(ord, buf):
+             if do_decrypt:
+                 # Apply decrypt rotors and xor in reverse order
+-                for i in xrange(nr-1,-1,-1):
++                for i in range(nr-1,-1,-1):
+                     c = pos[i] ^ rotors[i][c]
+             else:
+                 # Apply xor and ecrypt rotors
+-                for i in xrange(nr):
++                for i in range(nr):
+                     c = rotors[i][c ^ pos[i]]
+             append(c)
+ 
+@@ -96,7 +96,7 @@ class newrotor(object):
+             #        Masking with 0xff simulates this behavior.
+             #
+             pnew = 0 # (pnew >= size) works as "carry bit"
+-            for i in xrange(nr):
++            for i in range(nr):
+                 pnew = ((pos[i] + (pnew >= size)) & 0xff) + rotors[i][size]
+                 pos[i] = pnew % size
+ 
+@@ -146,7 +146,7 @@ class newrotor(object):
+                 # Generate identity permutation for 8-bit bytes plus an
+                 # (unused) increment value
+                 self.size = size = 256
+-                id_rotor = range(size+1)
++                id_rotor = list(range(size+1))
+ 
+                 # Generate nr "random" initial positions and "random"
+                 # en/decrypt rotors from id_rotor.
+@@ -155,7 +155,7 @@ class newrotor(object):
+                 E = []
+                 D = []
+                 positions = []
+-                for i in xrange(nr):
++                for i in range(nr):
+                     i = size
+                     positions.append(rand(i))
+                     erotor = id_rotor[:]
+--- a/save_load.py
++++ b/save_load.py
+@@ -12,7 +12,7 @@ warnings.filterwarnings("ignore",
+                         message='.*rotor module', module=__name__)
+ 
+ import wx
+-import os, os.path , cPickle, hashlib
++import os, os.path , pickle, hashlib
+ import cal_year
+ try:
+     import rotor
+@@ -40,15 +40,15 @@ def Save_Cycle(name='cycle', passwd='123
+     for d in cal_year.cycle.tablet:
+ 	objSave.append(['tablet',[d.GetDay(), d.GetMonth(), d.GetYear()]])
+ 
+-    for d in cal_year.cycle.colour_set.keys():
++    for d in list(cal_year.cycle.colour_set.keys()):
+ 	objSave.append(['colour', [d, cal_year.cycle.colour_set[d].Get()] ])
+ 
+-    tmp=rt.encrypt( 'Cycle'+cPickle.dumps(objSave) )
+-    tmp="UserName="+cPickle.dumps(name)+"==="+tmp
++    tmp=rt.encrypt( 'Cycle'+pickle.dumps(objSave) )
++    tmp="UserName="+pickle.dumps(name)+"==="+tmp
+     p, f_name=get_f_name(file)
+ 
+     if not os.path.exists(p):
+-	os.mkdir(p,0700)
++	os.mkdir(p,0o700)
+     f=open(f_name,"wb")
+     f.write(tmp)
+     f.close()
+@@ -75,7 +75,7 @@ def Load_Cycle(name='cycle', passwd='123
+ 	    return False
+ 	else:
+ 	    tmp=tmp[5:] #remove control word 'Cycle'
+-	    objLoad=cPickle.loads(tmp)
++	    objLoad=pickle.loads(tmp)
+ 	    set_color_default()
+ 	    for type, d in objLoad:
+ #		print "Load: ", type, d
+@@ -100,7 +100,7 @@ def Load_Cycle(name='cycle', passwd='123
+ 		    cal_year.cycle.note=d.copy()
+ 		elif type=='colour': # d=['item', (r,g,b)]
+ 		    c = wx.Colour(d[1][0], d[1][1], d[1][2])
+-		    if cal_year.cycle.colour_set.has_key(d[0]):
++		    if d[0] in cal_year.cycle.colour_set:
+ 			cal_year.cycle.colour_set[d[0]] = c
+ 		    else:
+ 			cal_yaar.cycle.colour_set.update({d[0]:c})
+--- a/setup.py
++++ b/setup.py
+@@ -1,4 +1,4 @@
+-#!/usr/bin/env python
++#!/usr/bin/python3
+ 
+ from distutils.core import setup
+ 


=====================================
debian/patches/series
=====================================
@@ -10,3 +10,4 @@
 06b_enter_your_name.patch
 07_wxpython3.0.patch
 wxclientsize.patch
+2to3.patch



View it on GitLab: https://salsa.debian.org/med-team/cycle/commit/4409d6a6235345da4ed874a9593516683a2d0239

-- 
View it on GitLab: https://salsa.debian.org/med-team/cycle/commit/4409d6a6235345da4ed874a9593516683a2d0239
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/20190906/b53eda0f/attachment-0001.html>


More information about the debian-med-commit mailing list