﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
7712	UploadedFile missing readline method	artagnon	nobody	"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
}}}"		closed	File uploads/storage	dev		fixed	upload uploadedfile	ville@…	Accepted	0	0	0	0	0	0
