mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Force FieldStorage to write tempfiles and never use StringIOs.
This commit is contained in:
@@ -20,12 +20,10 @@ class UploadToolAction( ToolAction ):
|
||||
for upload_dataset in incoming['files']:
|
||||
f = upload_dataset['file_data']
|
||||
if isinstance( f, FieldStorage ):
|
||||
# very small files can be StringIOs
|
||||
if 'name' in dir( f.file ) and f.file.name != '<fdopen>':
|
||||
local_filename = util.mkstemp_ln( f.file.name, 'upload_file_data_' )
|
||||
f.file.close()
|
||||
else:
|
||||
local_filename = datatypes.sniff.stream_to_file( f.file, prefix="strio_upload_file_" )[0]
|
||||
assert not isinstance( f.file, StringIO.StringIO )
|
||||
assert f.file.name != '<fdopen>'
|
||||
local_filename = util.mkstemp_ln( f.file.name, 'upload_file_data_' )
|
||||
f.file.close()
|
||||
upload_dataset['file_data'] = dict( filename = f.filename,
|
||||
local_filename = local_filename )
|
||||
if upload_dataset['url_paste'].strip() != '':
|
||||
|
||||
@@ -216,11 +216,18 @@ class DefaultWebTransaction( object ):
|
||||
# tempfiles. Necessary for externalizing the upload tool. It's a little hacky
|
||||
# but for performance reasons it's way better to use Paste's tempfile than to
|
||||
# create a new one and copy.
|
||||
import cgi
|
||||
import cgi, tempfile
|
||||
class FieldStorage( cgi.FieldStorage ):
|
||||
def make_file(self, binary=None):
|
||||
import tempfile
|
||||
return tempfile.NamedTemporaryFile()
|
||||
def read_lines(self):
|
||||
# Always make a new file
|
||||
self.file = self.make_file()
|
||||
self.__file = None
|
||||
if self.outerboundary:
|
||||
self.read_lines_to_outerboundary()
|
||||
else:
|
||||
self.read_lines_to_eof()
|
||||
cgi.FieldStorage = FieldStorage
|
||||
|
||||
class Request( webob.Request ):
|
||||
|
||||
Reference in New Issue
Block a user