I am trying to implement my own version of wsgiref for learning purpose and I ended up here:
from wsgiref.simple_server import make_server
class DemoApp():
def __init__(self, environ, start_response):
self.environ = environ
self.start = start_response
def __iter__(self, status):
self.status = '200 OK'
response_headers = [('Content-type','text/plain')]
self.start(status, response_headers)
return ["Hello World"]
if __name__ == '__main__':
httpd = make_server('', 1000, DemoApp)
print("Serving on port 1000")
httpd.serve_forever()
When I go to port 1000, I am getting the attribute error.
AttributeError: 'NoneType' object has no attribute 'split'
Where am I leaving mistakes?
Stacktrace:
Serving on port 1000
Traceback (most recent call last):
File "C:\Python27\lib\wsgiref\handlers.py", line 86, in run
self.finish_response()
File "C:\Python27\lib\wsgiref\handlers.py", line 131, in finish_response
self.close()
File "C:\Python27\lib\wsgiref\simple_server.py", line 33, in close
self.status.split(' ',1)[0], self.bytes_sent
AttributeError: 'NoneType' object has no attribute 'split'
127.0.0.1 - - [11/Jan/2014 12:40:09] "GET / HTTP/1.1" 500 59
Traceback (most recent call last):
File "C:\Python27\lib\SocketServer.py", line 295, in _handle_request_noblock
----------------------------------------
Exception happened during processing of request from ('127.0.0.1', 54469)
self.process_request(request, client_address)
File "C:\Python27\lib\SocketServer.py", line 321, in process_request
self.finish_request(request, client_address)
File "C:\Python27\lib\SocketServer.py", line 334, in finish_request
self.RequestHandlerClass(request, client_address, self)
File "C:\Python27\lib\SocketServer.py", line 649, in __init__
self.handle()
File "C:\Python27\lib\wsgiref\simple_server.py", line 124, in handle
handler.run(self.server.get_app())
File "C:\Python27\lib\wsgiref\handlers.py", line 92, in run
self.close()
File "C:\Python27\lib\wsgiref\simple_server.py", line 33, in close
self.status.split(' ',1)[0], self.bytes_sent
AttributeError: 'NoneType' object has no attribute 'split'
adding
.encode("utf-8")
solved the problem for me Python 3.4.2How about this, you need to
yield
the output than returning it.DemoApp
is called; The return value ofDemoApp.__init__
is used.DemoApp.__init__
returns nothing (You can't return anything in constructor).Try following instead of
DemoApp
class:Using class (Use
__call__
instead of__iter__
):You should encode the returned body to utf-8
This code works fine with me, I am using Python 3.3.3: