[Web-SIG] WSGI: read method

Robert Brewer fumanchu at amor.org
Fri Sep 8 20:46:52 CEST 2006

Ian Bicking wrote:
> An issue I just realized (as Robert was bringing up these things),
> is that I would like to be able to give input streams that don't
> have a known length.  In particular, I want to be able to do this:
> input = environ['wsgi.input']
> if hasattr(input, 'json_request'):
>      request = input.json_request
> else:
>      if 'CONTENT_LENGTH' in environ:
>          raw_request = input.read(int(environ['CONTENT_LENGTH']))
>      else:
>          raw_request = input.read()
>      request = simplejson.loads(raw_request)
> The idea is that the request body won't be serialized unless necessary,
> so internal requests (JSON, XMLRPC, etc) can avoid any serialization,
> while the WSGI app can deal with both these cases and normal 
> string-based requests.  But I can't set CONTENT_LENGTH during these 
> internal requests, because I'd need to figure out how long the 
> serialized request body was, and that would require actually serializing it.
> In the end it doesn't matter a whole lot, because almost no 
> intermediaries every look at wsgi.input, though if WSGI apps expecting a 
> JSON request but not aware of .json_request get one of these requests, 
> it is likely they will fail.
> Hmm... I could also set CONTENT_LENGTH='1', and make .read(1) return the 
> actual entire body, totally ignoring the size argument.  Or make it 
> '99999', or whatever.  That seems bad-clever, but maybe most workable 
> with PEP 333?

I'm getting lost on the phrase "internal request"--what do you mean by that?

Robert Brewer
System Architect
Amor Ministries
fumanchu at amor.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/web-sig/attachments/20060908/3f43b134/attachment.htm 

More information about the Web-SIG mailing list