On 2023-03-16 07:29, Jon Turney wrote:
On 15/03/2023 12:56, Brian Inglis via Cygwin-apps wrote:
On 2023-03-14 13:17, Jon Turney via Cygwin-apps wrote:
On 15/01/2023 12:52, Jon Turney via Cygwin-apps wrote:
This has come up in discussion a few times, and is now well overdue, I think.
Python 2.7 is the last python2 version, which was sunsetted on January 1, 2020.

3) There might also still be some other packages lurking which just install a script with a shebang containing 'python', and assume that python is python2. I don't know how we could identify those.

The remaining cases of packages which have a dependency on python and/or python2 are either this (packages which contain a python script with a python shebang line), or the other case which I hadn't previously considered - a package which contain an executable or shared library linked with libpython2.7.dll.
So, again I need inspect these to determine what should happen to them.

I'd like to adopt *xlsx2csv* - for an initial build see:

Jari is still the maintainer of record for that package, so I need to give him an opportunity to reply here.

https://cygwin.com/cgi-bin2/jobs.cgi?id=5607
https://cygwin.com/cgit/cygwin-packages/playground/commit/?id=af279166a903b526274f8b10264e206fc5010a68
https://github.com/cygwin/scallywag/actions/runs/4419738199
The author remains the same but version numbering staggers around then jumps to 0.5 and is now up to 0.8.1. The manual was a POD file from Jari run thru pod2man for 0.11 from 2010, but very outdated now, not to mention using Perl docs for Python modules, so I'm rewriting from help2man output to be current, comprehensive, and functional with `groff -man`. [I use it to get data into portable form, make it threat free, and fake spreadsheets for my accountant, if I want to use gvim instead of Gnumeric or Libre Office calc! ;^> ]

The critical piece of data I'm missing here is which of these is true:
a) This package contains a script with a python shebang. The current version doesn't work when python is python3, so an upgrade is needed to continue working when python2 is removed, or b) This package contains a script with a python shebang. The current version will continue to work when python is python3.

Unfortunately only a generic cygbuild sh script is supplied with the package - does nothing but complain without some other "magic" script or data! ;^> Jari's Debian 8/9 xlsx2csv releases have been updated to 0.20+20161027 from 0.11+20120814.

$ sed 1q xlsx2csv.py
#!/usr/bin/env python

Does not work with python3, nor after running 2to3 fixes - see attached logs - IANAPythonista

Anyway pylint was not useful compared to 2to3 - see attached pylint before and after 2to3 logs compared to 2to3 log.

--
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                -- Antoine de Saint-Exupéry
************* Module xlsx2csv.py
xlsx2csv.py.bak:286:65: E0001: leading zeros in decimal integer literals are 
not permitted; use an 0o prefix for octal integers (<unknown>, line 286) 
(syntax-error)
RefactoringTool: Adding transformation: apply
RefactoringTool: Adding transformation: asserts
RefactoringTool: Adding transformation: basestring
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Adding transformation: dict
RefactoringTool: Adding transformation: except
RefactoringTool: Adding transformation: exec
RefactoringTool: Adding transformation: execfile
RefactoringTool: Adding transformation: exitfunc
RefactoringTool: Adding transformation: filter
RefactoringTool: Adding transformation: funcattrs
RefactoringTool: Adding transformation: future
RefactoringTool: Adding transformation: getcwdu
RefactoringTool: Adding transformation: has_key
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Adding transformation: import
RefactoringTool: Adding transformation: imports
RefactoringTool: Adding transformation: imports2
RefactoringTool: Adding transformation: input
RefactoringTool: Adding transformation: intern
RefactoringTool: Adding transformation: isinstance
RefactoringTool: Adding transformation: itertools
RefactoringTool: Adding transformation: itertools_imports
RefactoringTool: Adding transformation: long
RefactoringTool: Adding transformation: map
RefactoringTool: Adding transformation: metaclass
RefactoringTool: Adding transformation: methodattrs
RefactoringTool: Adding transformation: ne
RefactoringTool: Adding transformation: next
RefactoringTool: Adding transformation: nonzero
RefactoringTool: Adding transformation: numliterals
RefactoringTool: Adding transformation: operator
RefactoringTool: Adding transformation: paren
RefactoringTool: Adding transformation: print
RefactoringTool: Adding transformation: raise
RefactoringTool: Adding transformation: raw_input
RefactoringTool: Adding transformation: reduce
RefactoringTool: Adding transformation: reload
RefactoringTool: Adding transformation: renames
RefactoringTool: Adding transformation: repr
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Adding transformation: standarderror
RefactoringTool: Adding transformation: sys_exc
RefactoringTool: Adding transformation: throw
RefactoringTool: Adding transformation: tuple_params
RefactoringTool: Adding transformation: types
RefactoringTool: Adding transformation: unicode
RefactoringTool: Adding transformation: urllib
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Adding transformation: xrange
RefactoringTool: Adding transformation: xreadlines
RefactoringTool: Adding transformation: zip
RefactoringTool: Refactoring xlsx2csv.py
RefactoringTool: Refactored xlsx2csv.py
RefactoringTool: Wrote changes to xlsx2csv.py
RefactoringTool: Files that were modified:
RefactoringTool: xlsx2csv.py
--- xlsx2csv.py (original)
+++ xlsx2csv.py (refactored)
@@ -148,10 +148,10 @@
             attrs = sheetNode._attrs
             name = attrs["name"].value
             if self.appName == 'xl':
-                if attrs.has_key('r:id'): id = int(attrs["r:id"].value[3:])
+                if 'r:id' in attrs: id = int(attrs["r:id"].value[3:])
                 else: id = int(attrs['sheetId'].value)
             else:
-                if attrs.has_key('sheetId'): id = int(attrs["sheetId"].value)
+                if 'sheetId' in attrs: id = int(attrs["sheetId"].value)
                 else: id = int(attrs['r:id'].value[3:])
             self.sheets.append({'name': name, 'id': id})
 
@@ -272,18 +272,18 @@
                 # get cell format
                 format = None
                 xfs_numfmt = self.styles.cellXfs[s]
-                if self.styles.numFmts.has_key(xfs_numfmt):
+                if xfs_numfmt in self.styles.numFmts:
                     format = self.styles.numFmts[xfs_numfmt]
-                elif STANDARD_FORMATS.has_key(xfs_numfmt):
+                elif xfs_numfmt in STANDARD_FORMATS:
                     format = STANDARD_FORMATS[xfs_numfmt]
                 # get format type
-                if format and FORMATS.has_key(format):
+                if format and format in FORMATS:
                     format_type = FORMATS[format]
 
                     if format_type == 'date': # date/time
                         try:
                             if self.workbook.date1904:
-                                date = datetime.datetime(1904, 01, 01) + 
datetime.timedelta(float(data))
+                                date = datetime.datetime(1904, 0o1, 0o1) + 
datetime.timedelta(float(data))
                             else:
                                 date = datetime.datetime(1899, 12, 30) + 
datetime.timedelta(float(data))
                             if self.dateformat:
@@ -322,12 +322,12 @@
             self.in_cell_value = True
         #elif self.in_cell and name == 'f':
         #    self.in_cell_formula = True
-        elif self.in_sheet and name == 'row' and attrs.has_key('r'):
+        elif self.in_sheet and name == 'row' and 'r' in attrs:
             self.rowNum = attrs['r']
             self.in_row = True
             self.columns = {}
             self.spans = None
-            if attrs.has_key('spans'):
+            if 'spans' in attrs:
                 self.spans = [int(i) for i in attrs['spans'].split(":")]
         elif name == 'sheetData':
             self.in_sheet = True
@@ -343,9 +343,9 @@
             self.columns[t - 1 + self.colIndex] = self.data
             self.in_cell = False
         if self.in_row and name == 'row':
-            if len(self.columns.keys()) > 0:
+            if len(list(self.columns.keys())) > 0:
                 d = [""] * (max(self.columns.keys()) + 1)
-                for k in self.columns.keys():
+                for k in list(self.columns.keys()):
                     d[k] = self.columns[k].encode("utf-8")
                 if self.spans:
                     l = self.spans[0] + self.spans[1] - 1
@@ -366,7 +366,7 @@
         else:
             if fullpath.lower().endswith(".xlsx"):
                 outfilepath = fullpath[:-4] + 'csv'
-                print("Converting %s to %s" %(fullpath, outfilepath))
+                print(("Converting %s to %s" %(fullpath, outfilepath)))
                 f = open(outfilepath, 'w+b')
                 try:
                     xlsx2csv(fullpath, f, **kwargs)
************* Module xlsx2csv
xlsx2csv.py:140:27: E1101: Instance of 'Document' has no 'firstChild' member 
(no-member)
xlsx2csv.py:142:28: E1101: Instance of 'Document' has no 'firstChild' member 
(no-member)
xlsx2csv.py:146:17: E1101: Instance of 'Document' has no 'firstChild' member 
(no-member)

-----------------------------------
Your code has been rated at 9.44/10

Reply via email to