(original) (raw)
Hi,
I have an asynchronous wsgi application handler which yields empty bytes before it is ready to yield the response body and, importantly, to call start\_response.
Something like this:
def wsgi\_handler(environ, start\_response):
� � � � body = generate\_body(environ)
� � � � body = maybe\_async(body)
� � � � while is\_async(body):
� � � � � � yield b''
� � � � start\_response(...)
� � � � ...
I started using wsgiref.validator recently, nice little gem in the standard lib, and I discovered that the above handler does not validate! Disaster.
Reading pep 3333
�
"the application�must�invoke the�start\_response()�callable before the iterable yields its first body bytestring, so that the server can send the headers before any body content. However, this invocation�may�be performed by the iterable's first iteration, so servers�must not�assume that�start\_response()�has been called before they begin iterating over the iterable."
The pseudocode above does yields bytes before start\_response, but they are not \*body\* bytes, they are empty bytes so that the asynchronous wsgi server releases the eventloop and call back at the next eventloop iteration.
I'm I misinterpreting the pep, or the wsgi validator should be fixed�accordingly?
Regards,
Luca