Hi all,

I've been using web.py to make a RESTful JSON API for some web applications
I'm working on. So far it's been great, very nice intuitive API and doesn't
take much code to do what you want.

I've come across a small bug with web.py on python 2.4 (which is what I'm
stuck with for the forseeable future).

The following works fine:

class Handler1(object):
    def GET():
        raise web.Redirect('/someotherurl')

but this:

class Handler2(object):
    def GET():
        raise web.Forbidden()

fails with the message:

TypeError: exceptions must be classes, instances, or strings (deprecated),
not Forbidden

I'm pretty sure this is because in python 2.4 the Exception class is a
classic-style class, rather than a new-style class and Python 2.4 won't let
you raise a new-style class instance. Looking in web.webapi, some of the
status codes (Redirect, Found, SeeOther, Gone) are defined using the class
statement which gies you a classic-style class, and others (Forbidden, OK,
Created) are generated dynamically using type(name, bases, dict), which
gives a new-style class.

I know I can just return an instance of web.Forbidden rather than raising
it, but this gets complicated once your GET function starts calling any
other methods (you have to check what they return, or use some kind of proxy
Exception class). I'm also using the handy mimerender package to decorate my
GETs, PUTs etc, and that expects GET to return a very specific type of
object (dict with something stored in 'message'), besides, conceptually,
raising an exception makes the most sense here.

One way of fixing this would be to define the Forbidden class using the
class statement, but that involves some extra manual class definitions in
web.webapi, just to fix it for an old version of python. Perhaps a
web.python24 submodule that only gets imported if running 2.4 and overwrites
web.Forbidden, etc with classic-style classes might be the best way to do
it? If this sounds sensible I'd be happy to write it, or is there a better
way round the problem?

Cheers,

Fred

-- 
You received this message because you are subscribed to the Google Groups 
"web.py" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/webpy?hl=en.

Reply via email to