ITA xlsx2csv (was Re: python2 removal)
Brian Inglis
Brian.Inglis@Shaw.ca
Thu Mar 16 15:53:20 GMT 2023
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
-------------- next part --------------
************* 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)
-------------- next part --------------
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)
-------------- next part --------------
************* 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
More information about the Cygwin-apps
mailing list