#27777: File object does not consistently open itself in context manager use
-------------------------------------+-------------------------------------
Reporter: Raphael Gaschignard | Owner: nobody
Type: Bug | Status: new
Component: File | Version: 1.10
uploads/storage |
Severity: Normal | Resolution:
Keywords: | Triage Stage:
| Unreviewed
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Raphael Gaschignard):
* status: closed => new
* resolution: needsinfo =>
Comment:
Sorry, I chose the wrong property. Here's two examples of behavior I
found that didn't make sense to me at first.
{{{ ContentFile}}} does not properly seek back to 0 on context manager re-
use.
{{{
In [8]: from django.core.files.base import ContentFile
In [9]: my_file = ContentFile("Hi there")
In [10]: with my_file as f: print(f.read())
Hi there
In [11]: with my_file as f: print(f.read())
# empty string, no content
}}}
for {{{File}}}s that use actual files in their backend, multiple context
manager usages results in a value error (I/O operation on closed file)
{{{
In [12]: from django.core.files.base import File
In [13]: my_file = File(open('hi.txt'))
In [14]: with my_file as f: print(f.read())
...: with my_file as f: print(f.read())
...:
Hi
---------------------------------------------------------------------------
ValueError Traceback (most recent call
last)
<ipython-input-14-ea725ad0698a> in <module>()
1 with my_file as f: print(f.read())
----> 2 with my_file as f: print(f.read())
3
ValueError: I/O operation on closed file.
}}}
I figured out that this behaviour *is* consistent with the behavior of
python's {{{file}}} object. But given that Django's {{{File}}} object
includes an "idempotent" {{{open}}}, it would seem useful for the context
manager to call {{{open}}}, so that we open the file and seek back to 0.
--
Ticket URL: <https://code.djangoproject.com/ticket/27777#comment:3>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/062.96c5f26726ffc037f49e19570b9e47cc%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.