[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