[infrae.fileupload][Sylvain Viollon] Support IOError on wsgi.input.

[email protected]
Newsgroups gmane.comp.web.zope.silva.cvs
Message-ID <[email protected]>
author:    Sylvain Viollon
date:      Mon Aug 19 18:13:49 2013 +0200
revision:  16:c56f50109b4c in infrae.fileupload
branch:    
details:   https://hg.infrae.com/infrae.fileupload?cmd=changeset;node=c56f50109b4c
modified:  src/infrae/fileupload/middleware.py
added:     
removed:   
log:       Support IOError on wsgi.input.

Subject: [infrae.fileupload][Sylvain Viollon] Improve messages, support IOError.


author:    Sylvain Viollon
date:      Mon Aug 19 18:17:01 2013 +0200
revision:  17:1441cef985a1 in infrae.fileupload
branch:    
details:   https://hg.infrae.com/infrae.fileupload?cmd=changeset;node=1441cef985a1
modified:  src/infrae/fileupload/middleware.py
added:     
removed:   
log:       Improve messages, support IOError.


diffstat:

 src/infrae/fileupload/middleware.py |  23 +++++++++++++++++------
 1 files changed, 17 insertions(+), 6 deletions(-)

diffs (63 lines):

diff -r 231fe8d29a49 -r 1441cef985a1 src/infrae/fileupload/middleware.py
--- a/src/infrae/fileupload/middleware.py	Mon Aug 19 18:09:29 2013 +0200
+++ b/src/infrae/fileupload/middleware.py	Mon Aug 19 18:17:01 2013 +0200
@@ -342,7 +342,8 @@
         logger.debug('%s: Size checked', identifier)
         _, options = cgi.parse_header(request.headers['content-type'])
         if 'boundary' not in options:
-            return fail('Upload request is malformed #1')
+            return fail('Upload request is malformed '
+                        '(protocol error)')
 
         part_boundary = '--' + options['boundary']
         end_boundary = '--' + options['boundary'] + '--'
@@ -352,7 +353,8 @@
         # Read the first marker
         marker = input_stream.read(line=True)
         if marker.strip() != part_boundary:
-            return fail('Upload request is malformed #2')
+            return fail('Upload request is malformed '
+                        '(boundary error)')
 
         # Read the headers
         headers = {}
@@ -367,7 +369,8 @@
             'content-type' not in headers or
             headers['content-disposition'][0] != 'form-data' or
             not headers['content-disposition'][1].get('filename')):
-            return fail('Upload request is malformed #3')
+            return fail('Upload request is malformed '
+                        '(request is not a file upload)')
 
         logger.debug('%s: Upload header checked', identifier)
         try:
@@ -377,7 +380,8 @@
                 headers['content-type'][0],
                 length)
         except LockError:
-            return fail('Upload server error #1')
+            return fail('Configuration error on upload server, '
+                        'upload directory missing')
         logger.debug('%s: Upload started', identifier)
 
         track_progress = upload.progress()
@@ -388,10 +392,17 @@
         output_stream = upload.write()
         while not compare(line, end_boundary):
             output_stream.send(line)
-            line = input_stream.read()
+            try:
+                line = input_stream.read()
+            except IOError:
+                error = fail('Network error while reading data')
+                output_stream.close()
+                track_progress.close()
+                return error
             if compare(line, part_boundary):
                 # Multipart, we don't handle that
-                error = fail('Upload request is malformed #4')
+                error = fail('Upload request is malformed '
+                             '(contains more than one request)')
                 output_stream.close()
                 track_progress.close()
                 return error
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.