0

I'm using a function in a web2py module which should raise an HTTP exception. For most functions (e.g. T) I do

from gluon import current
def f(x):
    return current.T(x)

But I can't do e.g. raise current.HTTP(...): I get

<type 'exceptions.AttributeError'> 'thread._local' object has no attribute 'HTTP'

So is there any way to use HTTP() in a web2py module?

user2667066
  • 1,867
  • 2
  • 19
  • 30

1 Answers1

1

The best option is probably just to import HTTP in the module:

from gluon.http import HTTP

def f(x):
    raise HTTP(200, 'Hello')

Alternatively, you can explicitly add the HTTP object to the current object. In a model file or in the relevant controller:

current.HTTP = HTTP

Then you will be able to access current.HTTP in any module where you import current.

Finally, the entire web2py global environment is available via the current.globalenv dictionary, so in any module where you import current, you can do:

raise current.globalenv['HTTP'](200, 'Hello')

web2py only adds the request, response, session, cache, and T objects directly to current, so if you want to access any other objects from the global environment, you must either add them explicitly or use current.globalenv.

Anthony
  • 25,466
  • 3
  • 28
  • 57