Welcome, guest | Sign In | My Account | Store | Cart

Notice! PyPM is being replaced with the ActiveState Platform, which enhances PyPM’s build and deploy capabilities. Create your free Platform account to download ActivePython or customize Python with the packages you require and get automatic updates.

Download
ActivePython
INSTALL>
pypm install plone.subrequest

How to install plone.subrequest

  1. Download and install ActivePython
  2. Open Command Prompt
  3. Type pypm install plone.subrequest
 Python 2.7Python 3.2Python 3.3
Windows (32-bit)
1.6.7 Available View build log
1.6.5 Available View build log
1.6.3 Available View build log
1.6.2 Available View build log
1.6.1 Available View build log
1.6 Available View build log
1.6b2 Available View build log
1.6b1 Available View build log
1.5 Available View build log
1.4 Available View build log
1.3 Available View build log
Windows (64-bit)
1.6.7 Available View build log
1.6.5 Available View build log
1.6.3 Available View build log
1.6.2 Available View build log
1.6.1 Available View build log
1.6 Available View build log
1.6b2 Available View build log
1.6b1 Available View build log
1.5 Available View build log
1.4 Available View build log
1.3 Available View build log
Mac OS X (10.5+)
1.6.7 Available View build log
1.6.5 Available View build log
1.6.3 Available View build log
1.6.2 Available View build log
1.6.1 Available View build log
1.6 Available View build log
1.6b2 Available View build log
1.6b1 Available View build log
1.5 Available View build log
1.4 Available View build log
1.3 Available View build log
Linux (32-bit)
1.6.7 Available View build log
1.6.5 Available View build log
1.6.3 Available View build log
1.6.2 Available View build log
1.6.1 Available View build log
1.6 Available View build log
1.6b2 Available View build log
1.6b1 Available View build log
1.5 Available View build log
1.4 Available View build log
1.3 Available View build log
Linux (64-bit)
1.6.7 Available View build log
1.6.5 Available View build log
1.6.3 Available View build log
1.6.2 Available View build log
1.6.1 Available View build log
1.6 Available View build log
1.6b2 Available View build log
1.6b1 Available View build log
1.5 Available View build log
1.4 Available View build log
1.3 Available View build log
 
License
GPL version 2
Lastest release
version 1.6.7 on Nov 20th, 2012

Overview

plone.subrequest provides a mechanism for issuing subrequests under Zope2.

Installation

Plone 4

An entry point is provided so no special installation is required past adding plone.subrequest to your instance's eggs.

Zope 2.12 without Plone

Load this package's ZCML in the usual manner.

Zope 2.10

You must install ZPublisherEventsBackport to use this package with Zope 2.10 and load both package's ZCML. The tests require Zope 2.12 / Python 2.6 so will not run.

Usage

Basic usage

Call subrequest(url), it returns a response object.

>>> from plone.subrequest import subrequest
>>> response = subrequest('/folder1/@@url')
>>> response.getBody()
'http://nohost/folder1'

response.getBody() also works for code that calls response.write(data).

>>> response = subrequest('/@@response-write')
>>> response.getBody()
'Some data.\nSome more data.\n'

But in this case response.getBody() may only be called once.

>>> response.getBody()
Traceback (most recent call last):
    ...
ValueError: I/O operation on closed file
Accessing the response body as a file

Some code may call response.write(data).

>>> response = subrequest('/@@response-write')

In which case you may access response.stdout as file.

>>> response.stdout.seek(0, 0)
>>> list(response.stdout)
['Some data.\n', 'Some more data.\n']

You can test whether a file was returned using response._wrote.

>>> response._wrote
1

When you're done, close the file:

>>> response.stdout.close()

Use response.outputBody() to ensure the body may be accessed as a file.

>>> from plone.subrequest import subrequest
>>> response = subrequest('/folder1/@@url')
>>> response._wrote
>>> response.outputBody()
>>> response._wrote
1
>>> response.stdout.seek(0, 0)
>>> list(response.stdout)
['http://nohost/folder1']
Relative paths

Relative paths are resolved relative to the parent request's location:

>>> request = traverse('/folder1/@@test')
>>> response = subrequest('folder1A/@@url')
>>> response.getBody()
'http://nohost/folder1/folder1A'

This takes account of default view's url.

>>> request = traverse('/folder1')
>>> request['URL'] == 'http://nohost/folder1/@@test'
True
>>> response = subrequest('folder1A/@@url')
>>> response.getBody()
'http://nohost/folder1/folder1A'
Virtual hosting

When virtual hosting is used, absolute paths are traversed from the virtual host root.

>>> request = traverse('/VirtualHostBase/http/example.org:80/folder1/VirtualHostRoot/')
>>> response = subrequest('/folder1A/@@url')
>>> response.getBody()
'http://example.org/folder1A'
Specifying the root

You may also set the root object explicitly

>>> app = layer['app']
>>> response = subrequest('/folder1A/@@url', root=app.folder1)
>>> response.getBody()
'http://nohost/folder1/folder1A'
Error responses

Subrequests may not be found.

>>> response = subrequest('/not-found')
>>> response.status
404

Or might raise an error.

>>> response = subrequest('/@@error')
>>> response.status
500

So check for the expected status.

>>> response = subrequest('/')
>>> response.status == 200
True
Handling subrequests

The parent request is set as PARENT_REQUEST onto subrequests.

Subrequests also provide the plone.subrequest.interfaces.ISubRequest marker interface.

Changelog

1.6.7 (2012-10-22)
  • Ensure correct handling of bare virtual hosting urls. [elro]
1.6.6 (2012-06-29)
  • Log errors that occur handling a subrequest to help debug plone.app.theming errors including content from a different url [anthonygerrard]
1.6.5 (2012-04-15)
  • Ensure parent url is a string and not unicode. [davisagli]
1.6.4 - 2012-03-22
  • Fix problems with double encoding some unicode charse by not copying too many other variables. [elro]
1.6.3 - 2012-02-12
  • Copy other request variables such as LANGUAGE to subrequest. [elro]
1.6.2 - 2011-07-04
1.6.1 - 2011-07-04
  • Move tests to package directory to making testing possible when installed normally.
1.6 - 2011-06-06
  • Ensure url is a string and not unicode. [elro]
1.6b2 - 2011-05-20
  • Set PARENT_REQUEST and add ISubRequest interface to subrequests. [elro]
1.6b1 - 2011-02-11
  • Handle IStreamIterator. [elro]
  • Simplify API so response.getBody() always works. [elro]
1.5 - 2010-11-26
  • Merge cookies from subrequest response into parent response. [awello]
1.4 - 2010-11-10
  • First processInput, then traverse (fixes #11254) [awello]
1.3 - 2010-08-24
  • Fixed bug with virtual hosting and quoted paths. [elro]
1.2 - 2010-08-16
  • Restore zope.component site after subrequest. [elro]
1.1 - 2010-08-14
  • Virtual hosting, relative url and error response support. [elro]
1.0 - 2010-07-28
  • Initial release. [elro]

Subscribe to package updates

Last updated Nov 20th, 2012

Download Stats

Last month:1

What does the lock icon mean?

Builds marked with a lock icon are only available via PyPM to users with a current ActivePython Business Edition subscription.

Need custom builds or support?

ActivePython Enterprise Edition guarantees priority access to technical support, indemnification, expert consulting and quality-assured language builds.

Plan on re-distributing ActivePython?

Get re-distribution rights and eliminate legal risks with ActivePython OEM Edition.