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.
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:51 | admin | set | github: 50790 |
| 2013年02月20日 00:41:55 | r.david.murray | set | status: open -> closed superseder: SpooledTemporaryFile's name property is broken nosy: + r.david.murray messages: + msg182456 resolution: duplicate stage: resolved |
| 2010年03月17日 09:50:27 | danohuiginn | set | nosy:
+ danohuiginn |
| 2009年07月22日 23:08:10 | leonov | set | title: SpooledTemporaryFile cleanups -> SpooledTemporaryFile breakages |
| 2009年07月22日 23:05:37 | leonov | set | files:
+ really-broken-properties-methods.diff messages: + msg90833 |
| 2009年07月22日 22:59:09 | leonov | set | title: SpooledTemporaryFile Cleanups -> SpooledTemporaryFile cleanups |
| 2009年07月22日 22:30:13 | leonov | set | title: SpooledTemporaryFile operates differently to TemporaryFile -> SpooledTemporaryFile Cleanups |
| 2009年07月22日 22:27:37 | leonov | set | files:
+ name-and-mode-properties.diff keywords: + patch messages: + msg90828 |
| 2009年07月22日 01:54:22 | leonov | create | |