#7712: UploadedFile doesn't act like a file object
---------------------------------+------------------------------------------
 Reporter:  artagnon             |       Owner:  nobody    
   Status:  new                  |   Milestone:  1.0 beta  
Component:  Tools                |     Version:  SVN       
 Keywords:  upload uploadedfile  |       Stage:  Unreviewed
Has_patch:  0                    |  
---------------------------------+------------------------------------------
 I encountered this while trying to use an uploaded image (using a form
 with ImageField) with PIL. The relevant code is as below:

 {{{
 import PIL

 def Avatar_file_handler(personInstance, avatarImage):
     """Writes the avatarImage to personInstance after necessary processing
     avatarImage is an UploadedFile object"""

     im = PIL.Image.open(avatarImage)
     # *** Error on this line!
 }}}

 The pdb trace is as follows:
 {{{
 -> im = Image.open(avatarImage)
 (Pdb)  Image.open(avatarImage)
 *** AttributeError: 'InMemoryUploadedFile' object has no attribute
 'readline'
 (Pdb) s
 --Call--
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1880)open()
 -> def open(fp, mode="r"):
 (Pdb) n
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1883)open()
 -> if mode != "r":
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1886)open()
 -> if isStringType(fp):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1891)open()
 -> filename = ""
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1893)open()
 -> prefix = fp.read(16)
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1895)open()
 -> preinit()
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1897)open()
 -> for i in ID:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1898)open()
 -> try:
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1899)open()
 -> factory, accept = OPEN[i]
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1900)open()
 -> if not accept or accept(prefix):
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1901)open()
 -> fp.seek(0)
 (Pdb)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1902)open()
 -> return factory(fp, filename)
 (Pdb)
 SyntaxError: SyntaxEr...A file',)
 > /usr/lib/python2.5/site-packages/PIL/Image.py(1902)open()
 -> return factory(fp, filename)
 (Pdb) print factory(fp, filename)
 *** SyntaxError: invalid IPTC/NAA file
 }}}

-- 
Ticket URL: <http://code.djangoproject.com/ticket/7712>
Django Code <http://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 post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to