[Zope] Accessing Zope REQUEST data from a Python module

Ken Winter ken at sunward.org
Wed Dec 5 19:35:22 EST 2007


I'm customizing a product.  To do what I'm trying to do, I need to be able
to access REQUEST data from within a Python module (not a script; a .py file
containing class and method definitions).

>From within a script, a line like

	req = context.REQUEST

does the job just fine.  But when I put that line into my product module, I
get a message like:

	Name "context" not defined

and I don't see any way to import that into my module.

At (http://www.plope.com/Books/2_7Edition/AppendixB.stx#0-8), the Zope API
Reference describes the module "HTTPRequest", which includes the class that
it calls "HTTPRequest(BaseRequest)", which apparently is the equivalent of
REQUEST as described above.  I have put this line into my module:

	from ZPublisher.HTTPRequest import HTTPRequest

but now I don't know how to reference the request's contents.  I put in this
line:

	req = HTTPRequest

and print "req" to a debug file, and it shows:

	ZPublisher.HTTPRequest.HTTPRequest

which I don't understand.  I have tried a half-dozen ways (suggested by the
Zope API Reference) to get an actual property of the current HTTPRequest,
but without success.  Examples:

	req['URL'] -> "TypeError: unsubscriptable object"
	req.get('URL') -> "TypeError: unbound method get() must be called
with HTTPRequest instance as first argument (got str instance
instead)"
	req.keys() -> "TypeError: unbound method keys() must be called with
HTTPRequest instance as first argument (got nothing instead)"

The last two suggest that, while I have successfully imported the
HTTPRequest *class*, I haven't successfully gotten the current HTTPRequest
*instance*.  I don't know how to do that.

So, I need an answer to any one of these questions:

1. How can the Zope global name "context" be defined or imported into a
non-script Python module?

2. How can one get the current instance of the class "HTTPRequest" into a
non-script Python module?

3. If I'm looking in the wrong direction, what is the right way to make the
current REQUEST's data available in a non-script Python module?

~ TIA
~ Ken 




More information about the Zope mailing list