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"