[issue33732] Python 2.7.15: xml.sax.parse() closes file objects passed to it

2020-04-26 Thread Zachary Ware


Zachary Ware  added the comment:

Hi Gibson,

I'm sorry this issue didn't get any attention before Python 2.7 reached EOL, 
but as that milestone has now passed I'm closing the issue.  Thank you for the 
report anyway!

--
nosy: +zach.ware
resolution:  -> out of date
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue33732] Python 2.7.15: xml.sax.parse() closes file objects passed to it

2018-06-01 Thread Gibson Fahnestock


Gibson Fahnestock  added the comment:

As an addendum, I note that other parsers, like:

parser = lxml.etree.XMLParser(compact=False)
etree.parse(some_fd, parser).find('some_text').text

do not close the fd they are given.

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue33732] Python 2.7.15: xml.sax.parse() closes file objects passed to it

2018-06-01 Thread Gibson Fahnestock


New submission from Gibson Fahnestock :

Sorry if this is a duplicate, I didn't find anything.

We hit some issues with this change:
- Python Bug: https://bugs.python.org/issue30264
- Github PRs: https://github.com/python/cpython/pull/1451 and 
https://github.com/python/cpython/pull/1476

It's possible I'm misunderstanding something, let me know if that's the case.

It seems that in Python 2.7.15, xml.sax.parse() closes file descriptors that 
are passed to it.

1. Isn't this a breaking change? It certainly breaks code we're using in 
production.
2. Why is the sax parser closing file descriptors that it didn't open? I 
understand if the parser is given a path and opens its own fd it makes sense to 
close it, but not when the fd is given directly.
3. What do you do if you need access to the file descriptor after parsing it 
(because you parse it in place)?

For file descriptors that point to files on disk we can work around it by 
reopening the file after each parse, but for something like a StringIO buffer 
(see simplified example below) I'm not aware of any way to get around the 
problem.

-> StringIO Example:

import xml.sax
import StringIO
# Some StringIO buffer.
fd = StringIO.StringIO(b'<_/>')
# Do some parsing.
xml.sax.parse(fd, xml.sax.handler.ContentHandler())
# Try to do some other parsing (fails).
xml.sax.parse(fd, xml.sax.handler.ContentHandler())

-> File Example:

import xml.sax
fd = open('/tmp/test-junit1.xml')
# Do some parsing.
xml.sax.parse(fd, xml.sax.handler.ContentHandler())
# Do some other parsing.
xml.sax.parse(fd, xml.sax.handler.ContentHandler())


Originally posted on 
https://github.com/python/cpython/pull/1451#issuecomment-393837538, thanks 
serhiy.storchaka for redirecting me here.

--
components: Library (Lib), XML
messages: 318408
nosy: gibfahn, serhiy.storchaka, vstinner
priority: normal
severity: normal
status: open
title: Python 2.7.15: xml.sax.parse() closes file objects passed to it
versions: Python 2.7

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com