Skip to content Skip to sidebar Skip to footer

Wsgi File Streaming With A Generator

I have the following code: def application(env, start_response): path = process(env) fh = open(path,'r') start_response('200 OK', [('Content-Type','application/octet-st

Solution 1:

Without some care, uwsgi is careful not to allow errors to leak, but a if you run your application in a stricter implementation, say the one provided with python as wsgiref.simple_server, you can more easily see the problem.

Serving <functionapplicationat 0xb65848> http://0.0.0.0:8000
Traceback(most recent call last):
  File "/usr/lib64/python3.2/wsgiref/handlers.py", line 138, in run
    self.finish_response()
  File "/usr/lib64/python3.2/wsgiref/handlers.py", line 179, in finish_response
    self.write(data)
  File "/usr/lib64/python3.2/wsgiref/handlers.py", line 264, inwrite"write() argument must be a bytes instance"
AssertionError: write() argument must be a bytes instance
localhost.localdomain - - [04/Aug/201216:27:08] "GET / HTTP/1.1"50059

The problem is that wsgi requires that data transmitted to and from the HTTP gateway must be served as bytes, but when you use open(path, 'r'), python 3 conveniently converts the data read to unicode, what in python 3 is str, using the default encoding.

changing

fh = open(path, 'r')

to

fh = open(path, 'rb')
#                 ^

fixes it.

Post a Comment for "Wsgi File Streaming With A Generator"