I am working on some integration tests for a Pyramid app, and I want to run
the under StopableWSGIServer, in the same process as the tests. The reason
for this is that I want to get test coverage for both the tests and the app
itself.
But try as I may, it seems that StoppableWSGIServer.run() is blocking,
which prevents the tests from ever running.
Below is a small "hello world" script that illustrates the problem.
Basically, the print statements that follow the call to run() are never
printed. Also, when I load the 'hello' page in a browser, it displays
properly, but I get the following exceptions in the server's console window:
- Socket error
- Unexpected exception when flushing
Here is the code for the script. Am I misunderstanding how to use
StopableWSGIServer? Maybe this is a Windows vs Unix thing (I am running
this on Windows 7).
I googled for StopableWSGIServer with the various exceptions and didn't
find anything.
Thx for your help.
Alain
------ demoapp.py ---
from pyramid.config import Configurator
from pyramid.response import Response
from webtest.http import StopableWSGIServer
def hello_world(request):
return Response('Hello %(name)s!' % request.matchdict)
def main():
""" This function returns a Pyramid WSGI application.
"""
config = Configurator()
config.add_route('hello', '/hello/{name}')
config.add_view(hello_world, route_name='hello')
return config.make_wsgi_app()
if __name__ == "__main__":
app = main()
port = 6543
host = 'localhost'
server = StopableWSGIServer.create(app, port=port, host=host)
server.run()
#
# Hum... somehow on windows, the run() call above is blocking and we
never
# get to see the message printed by the rest of the script.
#
# Also, when I access
#
# http://localhost:6543/hello/alain
#
# The page displays correctly in the web browser, but the server's
# console window shows this error message:
#
# Socket error
# Traceback (most recent call last):
# File "C:\Python34\lib\site-packages\waitress\channel.py", line 166,
in handle_read
# data = self.recv(self.adj.recv_bytes)
# File "C:\Python34\lib\asyncore.py", line 379, in recv
# data = self.socket.recv(buffer_size)
# BlockingIOError: [WinError 10035] A non-blocking socket operation
could not be completed immediately
#
# OR, other times I will get this message:
#
# Unexpected exception when flushing
# Traceback (most recent call last):
# File "C:\Python34\lib\site-packages\waitress\channel.py", line 139,
in handle_write
# flush()
# File "C:\Python34\lib\site-packages\waitress\channel.py", line 258,
in _flush_some
# outbuf.skip(num_sent, True)
# File "C:\Python34\lib\site-packages\waitress\buffers.py", line 269,
in skip
# buf.skip(numbytes, allow_prune)
# File "C:\Python34\lib\site-packages\waitress\buffers.py", line 77,
in skip
# numbytes, self.remain)
# ValueError: Can't skip 146 bytes in buffer of 0 bytes
#
print("Web server started on %s:%s" % (host, port))
input("Type any key to stop the server...")
print("Shutting down the server...")
server.shutdown()
print("Server stopped... May need to Ctrl-C to quit completelly.")
--
You received this message because you are subscribed to the Google Groups
"pylons-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/pylons-discuss.
For more options, visit https://groups.google.com/d/optout.