#27716: FieldFile incorrectly returns bytes the first time it is opened with 'r'
-------------------------------------+-------------------------------------
     Reporter:  Tom                  |                    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
-------------------------------------+-------------------------------------
Description changed by Tom:

Old description:

> This is strange. On the latest 1.10 release with Python 3.5.2 if I have
> this model, created in a fresh project with no non-default settings
> (other than 'MEDIA_ROOT' set to a directory and a single app in
> INSTALLED_APPS with this model):
>

> {{{
> class SomeModel(models.Model):
>     fd = models.FileField()
> }}}
>
> Then I run this in `manage.py shell`:
>
> {{{
> >>> s = SomeModel.objects.create(fd='test.txt')
> >>> s.fd.size
> 5
> >>> s.fd.closed
> True
> >>> s.fd.open('r')
> >>> s.fd.read()
> b'hello'
> >>> s.fd.close()
> >>> s.fd.open('r')
> >>> s.fd.read()
> 'hello'
> }}}
>
> The first time a `FileField` is opened it appears to disregard the
> encoding given and always returns bytes. However the second time it
> correctly returns a string. If you re-fetch the model then the behavior
> happens again.

New description:

 This is strange. On the latest 1.10 release with Python 3.5.2 if I have
 this model, created in a fresh project with no non-default settings (other
 than 'MEDIA_ROOT' set to a directory and a single app in INSTALLED_APPS
 with this model):


 {{{
 class SomeModel(models.Model):
     fd = models.FileField()
 }}}

 Then I run this in `manage.py shell`:

 {{{
 >>> s = SomeModel.objects.create(fd='test.txt')
 >>> s.fd.size
 5
 >>> s.fd.closed
 True
 >>> s.fd.open('r')
 >>> s.fd.read()
 b'hello'
 >>> s.fd.close()
 >>> s.fd.open('r')
 >>> s.fd.read()
 'hello'
 }}}

 The first time a `FileField` is opened it appears to disregard the
 encoding given and always returns bytes. However the second time it
 correctly returns a string. If you re-fetch the model then the behavior
 happens again.

 Just to mention that I'm on Linux, but my co-worker is on Windows and both
 appear to have this behavior.

--

--
Ticket URL: <https://code.djangoproject.com/ticket/27716#comment:1>
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/061.dce8ff5b1e100dba3a26d1905a836f19%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to