homepage

This issue tracker has been migrated to GitHub , and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: SpooledTemporaryFile breakages
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.1
process
Status: closed Resolution: duplicate
Dependencies: Superseder: SpooledTemporaryFile's name property is broken
View: 10355
Assigned To: Nosy List: danohuiginn, leonov, r.david.murray
Priority: normal Keywords: patch

Created on 2009年07月22日 01:54 by leonov, last changed 2022年04月11日 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
name-and-mode-properties.diff leonov, 2009年07月22日 22:27 Patch against SVN release31-maint review
really-broken-properties-methods.diff leonov, 2009年07月22日 23:05 Test for broken properties in SpooledTemporaryFile review
Messages (4)
msg90789 - (view) Author: Leon Matthews (leonov) Date: 2009年07月22日 01:54
According the docs for the tempfile module, SpooledTemporaryFile()
should operate "exactly as TemporaryFile() does". However, while
playing around trying to learn the module I found a couple of places
where this is not the case: 
import tempfile
hello = bytes('Hello World!', encoding='utf-8')
tf = tempfile.TemporaryFile()
stf = tempfile.SpooledTemporaryFile()
tf.write(hello)
stf.write(hello)
# (1) Read after write behaviour differs...
>>> print(tf.read()) 
b'Hello World'
>>> print(stf.read())
b''
# ...unless you seek first
>>> tf.seek(0)
>>> stf.seek(0)
>>> print(tf.read())
b'Hello World'
>>> print(stf.read())
b'Hello World'
# (2) Name attribute is fragile...
>>> print(tf.name)
3
print(stf.name)
AttributeError: '_io.BytesIO' object has no attribute 'name'
# ...until StringIO object replaced
stf.rollover()
print(stf.name) # 4
I'm not sure if this should be categorised as a documentation or code
issue. In either case please be gentle -- I'm still just learning Python
(evaluating it as a [now likely] replacement for PHP for web application
development in our company). I'm filing this bug because, as a
beginner, I was confused by the inconsistency between the docs and the
actual behaviour.
I'd be happy to try and write documentation and/or unit tests about
this, if somebody would be willing to review them for me... :-)
msg90828 - (view) Author: Leon Matthews (leonov) Date: 2009年07月22日 22:27
I've attached a patch to SpooledTemporaryFile (and its test class) to
remove the suprising exceptions.
SpooledTemporaryFile uses a io.StringIO for storage (in self._file)
until it reaches a certain size (or rollover() is called), at which
point it switches to a file object (or _TemporaryFileWrapper on
non-posix platforms). This implementation detail should be abstracted
away from the user.
The interface mismatch there which caused an AttributeError to be thrown
-- but only if the file size was new, or below a certain size.
msg90833 - (view) Author: Leon Matthews (leonov) Date: 2009年07月22日 23:05
Some properties seem to be broken no matter if the underlying storage
system is file or StringIO.
Properties: encoding, newlines, and softspace
And the method: xreadlines()
I'm not sure what the correct behaviour should be (although I'm pretty
sure xreadlines() should just be deleted -- but when?), so I haven't
tried to patch the code. The attached patch is a just (a beginners idea
of a) test to confirm the problem.
msg182456 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2013年02月20日 00:41
Thanks for the report, and sorry we didn't handle it when you reported it. This issue was re-reported and fixed in issue #10355.
History
Date User Action Args
2022年04月11日 14:56:51adminsetgithub: 50790
2013年02月20日 00:41:55r.david.murraysetstatus: open -> closed

superseder: SpooledTemporaryFile's name property is broken

nosy: + r.david.murray
messages: + msg182456
resolution: duplicate
stage: resolved
2010年03月17日 09:50:27danohuiginnsetnosy: + danohuiginn
2009年07月22日 23:08:10leonovsettitle: SpooledTemporaryFile cleanups -> SpooledTemporaryFile breakages
2009年07月22日 23:05:37leonovsetfiles: + really-broken-properties-methods.diff

messages: + msg90833
2009年07月22日 22:59:09leonovsettitle: SpooledTemporaryFile Cleanups -> SpooledTemporaryFile cleanups
2009年07月22日 22:30:13leonovsettitle: SpooledTemporaryFile operates differently to TemporaryFile -> SpooledTemporaryFile Cleanups
2009年07月22日 22:27:37leonovsetfiles: + name-and-mode-properties.diff
keywords: + patch
messages: + msg90828
2009年07月22日 01:54:22leonovcreate

AltStyle によって変換されたページ (->オリジナル) /