[Web-SIG] Alternative to threading.local, based on the stack

Ian Bicking ianb at colorstudy.com
Mon Jul 7 22:45:40 CEST 2008


Manlio Perillo wrote:
> Ian Bicking ha scritto:
>> Manlio Perillo wrote:
>> [...]
>>>
>>> As an example, in Paste you have choosed to using config dictionary 
>>> for middleware configuration, that is, you have middleware factories.
>>
>> I think this is a red herring.  WebOb specifically doesn't do anything 
>> related to configuration or the setup of the stack.  What it does do 
>> is stuff like:
>>
>> expires = http.format_time(0)
>> http.generate_cookie(
>>     environ, headers, name, '', expires=expires,
>>     domain=cookie_domain(environ), path=path,
>>     max_age=0)
>>
>> which would be resp.delete_cookie(name) (well, cookie_domain seems to 
>> be derived from a setting, but that's mostly unrelated).  This isn't a 
>> particularly substantial difference, but these small conveniences add up.
>>
> 
> As I have said, this is a personal taste, I don't like the 
> "architecture" used by WebOb and prefer to directly use the environ 
> dictionary without introducing other abstractions.
> This is possible, I'm writing a "not simple" application using wsgix.
> 
> 
> I'm still evaluating if I can reuse WebOb parsing functions (and this 
> would be a great thing: I think that we *really* need a package with 
> *only* low *level* parsing functions for the HTTP protocol).
> 
>  From what I can see, WebOb *does* not offer a low level interface for 
> the parsers: you *have* to use the Request object.
> 
> I really like multilevel architectures, instead.

This was the deliberate approach of Paste, and it does have several 
functions for doing things similar to how you describe.  As I said, I 
went down exactly this path, but I think WebOb solves the problem 
better.  You can think of WebOb as a way of currying functions.  All the 
request functions take an environ argument, curried through 
instantiation of webob.Request.  All response functions take 
status/headers/app_iter, curried through webob.Response.  State is never 
held outside the environment or the status/headers/app_iter of the response.

So think of webob.Request as the module of request-parsing routines, and 
webob.Response as the module of response-parsing routines.  (There are 
underlying functions for things like parsing dates, but they are only 
exposed through those classes.)

-- 
Ian Bicking : ianb at colorstudy.com : http://blog.ianbicking.org


More information about the Web-SIG mailing list