ok, I digged more, and sadly I think that for problem 1) HTTP should
be rewritten, or at least a new class should be extended to let more
flexibility.

Don't know if I'm boring some ultra-technical pythonist, but I'll try
to explain what I managed to understand.

this is how HTTP is defined in http.py :

class HTTP(BaseException):

    def __init__( self, status, body='', **headers ):
               bla bla bla

basically, every extra argument passed get transformed to a dict and
passed along with the function.

eg. HTTP(401,['hello'],foo='bar', bar='foo') ---> HTTP(401,
['hello'],dict(foo='bar',bar='foo')) --> __init__ done

Now, the hard part: dict() only allow "keyword" syntax for the keys,
and that will be in our case the various headers "name", while their
values should be header content. Unfortunately, keywords accept
letters, digit and underscore.... no dash.

In fact:
**************
python
> a= dict(foo='bar',bar='foo')
> a= dict(foo_1='bar',bar='foo')
> a= dict(foo-1='bar',bar='foo')
SyntaxError: keyword can't be an expression
**************

So, we can't actually pass any header to HTTP() without interfering
with dict() call that gets called on **headers if our keyword contains
'-' . That eliminates a LOT of standard headers and make HTTP quite
unuseful... I can't get the reason behind this wasn't a problem for
peoples writing APIs or services....

Another question popped: can we use response.status and
response.headers ? It seems that if my controller function return
anything (string, list or dict) the status is always 200 and no added
headers show up in firebug....

Reply via email to