twisted.web.widgets.Form.html [plain text]
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>twisted.web.widgets.Form</title>
<link rel="stylesheet" href="epydoc.css" type="text/css"></link>
</head>
<body bgcolor="white" text="black" link="blue" vlink="#204080"
alink="#204080">
<!-- =========== START OF NAVBAR =========== -->
<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">
<tr valign="center">
<th class="navbar"> <a class="navbar" href="twisted.html">Home</a> </th>
<th class="navbar"> <a class="navbar" href="trees.html">Trees</a> </th>
<th class="navbar"> <a class="navbar" href="indices.html">Index</a> </th>
<th class="navbar"> <a class="navbar" href="help.html">Help</a> </th>
<th class="navbar" align="right" width="100%">
<table border="0" cellpadding="0" cellspacing="0">
<tr><th class="navbar" align="center">
<p class="nomargin">
<a class="navbar" target="_top" href="http://twistedmatrix.com/">Twisted 1.3.0rc1</a>
</p></th></tr></table>
</th>
</tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0">
<tr valign="top">
<td width="100%">
<font size="-1"><b class="breadcrumbs">
<a href="twisted.html">Package twisted</a> ::
<a href="twisted.web.html">Package web</a> ::
<a href="twisted.web.widgets.html">Module widgets</a> ::
Class Form
</b></font></br>
</td>
<td><table cellpadding="0" cellspacing="0">
<tr><td align="right"><font size="-2">[<a href="frames.html"target="_top">frames</a> | <a href="twisted.web.widgets.Form.html" target="_top">no frames</a>]</font></td></tr>
</table></td>
</tr></table>
<!-- =========== START OF CLASS DESCRIPTION =========== -->
<h2 class="class">Class Form</h2>
<pre class="base-tree">
<a href="twisted.web.widgets.Widget.html"><code>Widget</code></a> --+
|
<b>Form</b>
</pre><br />
<dl><dt><b>Known Subclasses:</b></dt>
<dd>
<a href="twisted.words.webwords.AccountCreationWidget.html"><code>AccountCreationWidget</code></a>,
<a href="twisted.web.guard.AuthForm.html"><code>AuthForm</code></a>,
<a href="twisted.enterprise.dbgadgets.ChangePasswordForm.html"><code>ChangePasswordForm</code></a>,
<a href="twisted.enterprise.dbgadgets.NewIdentityForm.html"><code>NewIdentityForm</code></a>,
<a href="twisted.enterprise.dbgadgets.NewPerspectiveForm.html"><code>NewPerspectiveForm</code></a>,
<a href="twisted.enterprise.dbgadgets.RemoveIdentityForm.html"><code>RemoveIdentityForm</code></a>,
<a href="twisted.enterprise.dbgadgets.RemovePerspectiveForm.html"><code>RemovePerspectiveForm</code></a></dd></dl>
<hr/>
<p>I am a web form.</p>
In order to use me, you probably want to set self.formFields (or
override 'getFormFields') and override 'process'. In order to demonstrate
how this is done, here is a small sample Form subclass:
<pre class="literalblock">
| from twisted.web import widgets
| class HelloForm(widgets.Form):
| formFields = [
| ['string', 'Who to greet?', 'whoToGreet', 'World',
| 'This is for choosing who to greet.'],
| ['menu', 'How to greet?', 'how', [('cheerfully', 'with a smile'),
| ('sullenly', 'without enthusiasm'),
| ('spontaneously', 'on the spur of the moment')]]
| 'This is for choosing how to greet them.']
| def process(self, write, request, submit, whoToGreet, how):
| write('The web wakes up and %s says, "Hello, %s!"' % (how, whoToGreet))
</pre>
If you load this widget, you will see that it displays a form with 2
inputs derived from data in formFields. Note the argument names to
'process': after 'write' and 'request', they are the same as the 3rd
elements ('Input Name' parameters) of the formFields list.
<hr/>
<!-- =========== START OF METHOD SUMMARY =========== -->
<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="summary">
<th colspan="2">Method Summary</th></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><a name="_displayFormat"></a><span class="summary-sig"><span class="summary-sig-name">_displayFormat</span>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>request</span>,
<span class=summary-sig-arg>form</span>)</span></code>
</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><a name="_displayProcess"></a><span class="summary-sig"><span class="summary-sig-name">_displayProcess</span>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>request</span>,
<span class=summary-sig-arg>form</span>)</span></code>
</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Form.html#_doProcess" class="summary-sig-name"><code>_doProcess</code></a>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>form</span>,
<span class=summary-sig-arg>write</span>,
<span class=summary-sig-arg>request</span>)</span></code>
<br />
(internal) Prepare arguments for self.process.</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Form.html#display" class="summary-sig-name"><code>display</code></a>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>request</span>)</span></code>
<br />
Display the form.</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Form.html#format" class="summary-sig-name"><code>format</code></a>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>form</span>,
<span class=summary-sig-arg>write</span>,
<span class=summary-sig-arg>request</span>)</span></code>
<br />
I display an HTML FORM according to the result of
self.getFormFields.</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Form.html#formatError" class="summary-sig-name"><code>formatError</code></a>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>error</span>)</span></code>
<br />
Format an error message.</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Form.html#getFormFields" class="summary-sig-name"><code>getFormFields</code></a>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>request</span>,
<span class=summary-sig-arg>fieldSet</span>)</span></code>
<br />
I return a list of lists describing this form, or a Deferred.</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Form.html#getFormID" class="summary-sig-name"><code>getFormID</code></a>(<span class=summary-sig-arg>self</span>)</span></code>
<br />
Override me: I disambiguate between multiple forms of the same
type.</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Form.html#process" class="summary-sig-name"><code>process</code></a>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>write</span>,
<span class=summary-sig-arg>request</span>,
<span class=summary-sig-arg>submit</span>,
<span class="summary-sig-kwarg">**kw</span>)</span></code>
<br />
Override me: I process a form.</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><a name="shouldProcess"></a><span class="summary-sig"><span class="summary-sig-name">shouldProcess</span>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>request</span>)</span></code>
</td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Form.html#tryAgain" class="summary-sig-name"><code>tryAgain</code></a>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>err</span>,
<span class=summary-sig-arg>req</span>)</span></code>
<br />
Utility method for re-drawing the form with an error message.</td></tr>
<tr bgcolor="#e8f0f8" class="group">
<th colspan="2"> Inherited from Widget</th></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"> </font></td>
<td><code><span class="summary-sig"><a href="twisted.web.widgets.Widget.html#getTitle" class="summary-sig-name"><code>getTitle</code></a>(<span class=summary-sig-arg>self</span>,
<span class=summary-sig-arg>request</span>)</span></code>
</td></tr>
</table><br />
<!-- =========== START OF CLASS VARIABLE SUMMARY =========== -->
<table class="summary" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="summary">
<th colspan="2">Class Variable Summary</th></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"><code>str</code></font></td>
<td><b><a href="twisted.web.widgets.Form.html#actionURI"><code>actionURI</code></a></b> = <span title="''"><code><span class="variable-quote">'</span><span class="variable-quote">'</span> </code>
</span></td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"><code>int</code></font></td>
<td><b><a href="twisted.web.widgets.Form.html#formAcceptExtraArgs"><code>formAcceptExtraArgs</code></a></b> = <span title="0">0 </span></td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"><code>list</code></font></td>
<td><b><a href="twisted.web.widgets.Form.html#formFields"><code>formFields</code></a></b> = <span title="[]"><code>[] </code>
</span></td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"><code>dict</code></font></td>
<td><b><a href="twisted.web.widgets.Form.html#formGen"><code>formGen</code></a></b> = <span title="{'checkbox': <function htmlFor_checkbox at 0x8542e54>, 'string': <function htmlFor_string at 0x8542d3c>, 'multimenu': <function htmlFor_multimenu at 0x8542e1c>, 'int': <function htmlFor_string at 0x8542d3c>, 'menu': <function htmlFor_menu at 0x8542de4>, 'float': <function htmlFor_string at 0x8542d3c>, 'checkgroup': <function htmlFor_checkgroup at 0x8542e8c>, 'radio': <function htmlFor_radio at 0x8542ec4>, 'file': <function htmlFor_file at 0x8542d04>, 'text': <function htmlFor_text at 0x8542dac>, 'hidden': <function htmlFor_hidden at 0x8542ccc>, 'password': <function htmlFor_password at 0x85..."><code>{'checkbox': <function htmlFor_checkbox at 0x8<span class="variable-ellipsis">...</span></code>
</span></td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"><code>dict</code></font></td>
<td><b><a href="twisted.web.widgets.Form.html#formParse"><code>formParse</code></a></b> = <span title="{'int': <type 'int'>, 'float': <type 'float'>}"><code>{'int': <type 'int'>, 'float': <type 'float'<span class="variable-ellipsis">...</span></code>
</span></td></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"><code>list</code></font></td>
<td><b><a href="twisted.web.widgets.Form.html#submitNames"><code>submitNames</code></a></b> = <span title="['Submit']"><code>['Submit'] </code>
</span></td></tr>
<tr bgcolor="#e8f0f8" class="group">
<th colspan="2"> Inherited from Widget</th></tr>
<tr><td align="right" valign="top" width="15%"><font size="-1"><code>NoneType</code></font></td>
<td><b><a href="twisted.web.widgets.Widget.html#title"><code>title</code></a></b> = <span title="None">None </span></td></tr>
</table><br />
<!-- =========== START OF METHOD DETAILS =========== -->
<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="details">
<th colspan="2">Method Details</th></tr>
</table>
<a name="_doProcess"></a>
<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>
<h3><span class="sig"><span class="sig-name">_doProcess</span>(<span class=sig-arg>self</span>,
<span class=sig-arg>form</span>,
<span class=sig-arg>write</span>,
<span class=sig-arg>request</span>)</span>
</h3>
(internal) Prepare arguments for self.process.
<dl><dt></dt><dd>
</dd></dl>
</td></tr></table>
<a name="display"></a>
<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>
<h3><span class="sig"><span class="sig-name">display</span>(<span class=sig-arg>self</span>,
<span class=sig-arg>request</span>)</span>
</h3>
Display the form.
<dl><dt></dt><dd>
<dl><dt><b>Overrides:</b></dt>
<dd><a href="twisted.web.widgets.Widget.html#display"><code>twisted.web.widgets.Widget.display</code></a></dd>
</dl>
</dd></dl>
</td></tr></table>
<a name="format"></a>
<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>
<h3><span class="sig"><span class="sig-name">format</span>(<span class=sig-arg>self</span>,
<span class=sig-arg>form</span>,
<span class=sig-arg>write</span>,
<span class=sig-arg>request</span>)</span>
</h3>
I display an HTML FORM according to the result of
self.getFormFields.
<dl><dt></dt><dd>
</dd></dl>
</td></tr></table>
<a name="formatError"></a>
<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>
<h3><span class="sig"><span class="sig-name">formatError</span>(<span class=sig-arg>self</span>,
<span class=sig-arg>error</span>)</span>
</h3>
<p>Format an error message.</p>
By default, this will make the message appear in red, bold
italics.
<dl><dt></dt><dd>
</dd></dl>
</td></tr></table>
<a name="getFormFields"></a>
<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>
<h3><span class="sig"><span class="sig-name">getFormFields</span>(<span class=sig-arg>self</span>,
<span class=sig-arg>request</span>,
<span class=sig-arg>fieldSet</span>=<span class=sig-default>None</span>)</span>
</h3>
<p>I return a list of lists describing this form, or a Deferred.</p>
This information is used both to display the form and to process it.
The list is in the following format:
<pre class="literalblock">
| [['Input Type', 'Display Name', 'Input Name', 'Input Value', 'Description'],
| ['Input Type 2', 'Display Name 2', 'Input Name 2', 'Input Value 2', 'Description 2']
| ...]
</pre>
Valid values for 'Input Type' are:
<ul>
<li>
'hidden': a hidden field that contains a string that the user
won't change
</li>
<li>
'string': a short string
</li>
<li>
'int': an integer, e.g. 1, 0, 25 or -23
</li>
<li>
'float': a float, e.g. 1.0, 2, -3.45, or 28.4324231
</li>
<li>
'text': a longer text field, suitable for entering
paragraphs
</li>
<li>
'menu': an HTML SELECT input, a list of choices
</li>
<li>
'multimenu': an HTML SELECT input allowing multiple choices
</li>
<li>
'checkgroup': a group of checkboxes
</li>
<li>
'radio': a group of radio buttons
</li>
<li>
'password': a 'string' field where the contents are not visible
as the user types
</li>
<li>
'file': a file-upload form (EXPERIMENTAL)
</li>
</ul>
<p>'Display Name' is a descriptive string that will be used to identify
the field to the user.</p>
<p>The 'Input Name' must be a legal Python identifier that describes
both the value's name on the HTML form and the name of an argument to
'self.process()'.</p>
<p>The 'Input Value' is usually a string, but its value can depend on
the 'Input Type'. 'int' it is an integer, 'menu' it is a list of pairs
of strings, representing (value, name) pairs for the menu options.
Input value for 'checkgroup' and 'radio' should be a list of
('inputName', 'Display Name', 'checked') triplets.</p>
<p>The 'Description' field is an (optional) string which describes the
form item to the user.</p>
<p>If this result is statically determined for your Form subclass, you
can assign it to FormSubclass.formFields; if you need to determine it
dynamically, you can override this method.</p>
Note: In many cases it is desirable to use user input for defaults
in the form rather than those supplied by your calculations, which is
what this method will do to self.formFields. If this is the case for
you, but you still need to dynamically calculate some fields, pass your
results back through this method by doing:
<pre class="literalblock">
| def getFormFields(self, request):
| myFormFields = [self.myFieldCalculator()]
| return widgets.Form.getFormFields(self, request, myFormFields)
</pre>
<dl><dt></dt><dd>
</dd></dl>
</td></tr></table>
<a name="getFormID"></a>
<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>
<h3><span class="sig"><span class="sig-name">getFormID</span>(<span class=sig-arg>self</span>)</span>
</h3>
<p>Override me: I disambiguate between multiple forms of the same
type.</p>
In order to determine which form an HTTP POST request is for, you
must have some unique identifier which distinguishes your form from
other forms of the same class. An example of such a unique identifier
would be: on a page with multiple FrobConf forms, each FrobConf form
refers to a particular Frobnitz instance, which has a unique id(). The
FrobConf form's getFormID would probably look like this:
<pre class="literalblock">
| def getFormID(self):
| return str(id(self.frobnitz))
</pre>
By default, this method will return None, since distinct Form
instances may be identical as far as the application is concerned.
<dl><dt></dt><dd>
</dd></dl>
</td></tr></table>
<a name="process"></a>
<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>
<h3><span class="sig"><span class="sig-name">process</span>(<span class=sig-arg>self</span>,
<span class=sig-arg>write</span>,
<span class=sig-arg>request</span>,
<span class=sig-arg>submit</span>,
<span class="sig-kwarg">**kw</span>)</span>
</h3>
<p>Override me: I process a form.</p>
<p>I will only be called when the correct form input data to process
this form has been received.</p>
<p>I take a variable number of arguments, beginning with 'write',
'request', and 'submit'. 'write' is a callable object that will append
a string to the response, 'request' is a twisted.web.request.Request
instance, and 'submit' is the name of the submit action taken.</p>
The remainder of my arguments must be correctly named. They will
each be named after one of the
<dl><dt></dt><dd>
</dd></dl>
</td></tr></table>
<a name="tryAgain"></a>
<table width="100%" class="func-details" bgcolor="#e0e0e0"><tr><td>
<h3><span class="sig"><span class="sig-name">tryAgain</span>(<span class=sig-arg>self</span>,
<span class=sig-arg>err</span>,
<span class=sig-arg>req</span>)</span>
</h3>
<p>Utility method for re-drawing the form with an error message.</p>
This is handy in forms that process Deferred results. Normally you
can just raise a FormInputError() and this will happen by default.
<dl><dt></dt><dd>
</dd></dl>
</td></tr></table>
<br />
<!-- =========== START OF CLASS VARIABLE DETAILS =========== -->
<table class="details" border="1" cellpadding="3" cellspacing="0" width="100%" bgcolor="white">
<tr bgcolor="#70b0f0" class="details">
<th colspan="2">Class Variable Details</th></tr>
</table>
<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>
<a name="actionURI"></a>
<h3>actionURI</h3>
<dl>
<dt></dt>
<dd>
<dl>
<dt><b>Type:</b></dt>
<dd>
<code>str</code>
</dd>
<span title="''"> <dt><b>Value:</b></dt>
<dd><table><tr><td>
<pre class="variable">
<span class="variable-quote">'</span><span class="variable-quote">'</span> </pre>
</td></tr></table></dd>
</span> </dl>
</dd>
</dl></td></tr></table>
<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>
<a name="formAcceptExtraArgs"></a>
<h3>formAcceptExtraArgs</h3>
<dl>
<dt></dt>
<dd>
<dl>
<dt><b>Type:</b></dt>
<dd>
<code>int</code>
</dd>
<span title="0"> <dt><b>Value:</b></dt>
<dd><table><tr><td>
<pre class="variable">
0 </pre>
</td></tr></table></dd>
</span> </dl>
</dd>
</dl></td></tr></table>
<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>
<a name="formFields"></a>
<h3>formFields</h3>
<dl>
<dt></dt>
<dd>
<dl>
<dt><b>Type:</b></dt>
<dd>
<code>list</code>
</dd>
<span title="[]"> <dt><b>Value:</b></dt>
<dd><table><tr><td>
<pre class="variable">
[] </pre>
</td></tr></table></dd>
</span> </dl>
</dd>
</dl></td></tr></table>
<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>
<a name="formGen"></a>
<h3>formGen</h3>
<dl>
<dt></dt>
<dd>
<dl>
<dt><b>Type:</b></dt>
<dd>
<code>dict</code>
</dd>
<span title="{'checkbox': <function htmlFor_checkbox at 0x8542e54>, 'string': <function htmlFor_string at 0x8542d3c>, 'multimenu': <function htmlFor_multimenu at 0x8542e1c>, 'int': <function htmlFor_string at 0x8542d3c>, 'menu': <function htmlFor_menu at 0x8542de4>, 'float': <function htmlFor_string at 0x8542d3c>, 'checkgroup': <function htmlFor_checkgroup at 0x8542e8c>, 'radio': <function htmlFor_radio at 0x8542ec4>, 'file': <function htmlFor_file at 0x8542d04>, 'text': <function htmlFor_text at 0x8542dac>, 'hidden': <function htmlFor_hidden at 0x8542ccc>, 'password': <function htmlFor_password at 0x85..."> <dt><b>Value:</b></dt>
<dd><table><tr><td>
<pre class="variable">
{'checkbox': <function htmlFor_checkbox at 0x8542e54>,
'checkgroup': <function htmlFor_checkgroup at 0x8542e8c>,
'file': <function htmlFor_file at 0x8542d04>,
'float': <function htmlFor_string at 0x8542d3c>,
'hidden': <function htmlFor_hidden at 0x8542ccc>,
'int': <function htmlFor_string at 0x8542d3c>,
'menu': <function htmlFor_menu at 0x8542de4>,
'multimenu': <function htmlFor_multimenu at 0x8542e1c>,
<span class="variable-ellipsis">...</span> </pre>
</td></tr></table></dd>
</span> </dl>
</dd>
</dl></td></tr></table>
<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>
<a name="formParse"></a>
<h3>formParse</h3>
<dl>
<dt></dt>
<dd>
<dl>
<dt><b>Type:</b></dt>
<dd>
<code>dict</code>
</dd>
<span title="{'int': <type 'int'>, 'float': <type 'float'>}"> <dt><b>Value:</b></dt>
<dd><table><tr><td>
<pre class="variable">
{'int': <type 'int'>, 'float': <type 'float'>} </pre>
</td></tr></table></dd>
</span> </dl>
</dd>
</dl></td></tr></table>
<table width="100%" class="var-details" bgcolor="#e0e0e0"><tr><td>
<a name="submitNames"></a>
<h3>submitNames</h3>
<dl>
<dt></dt>
<dd>
<dl>
<dt><b>Type:</b></dt>
<dd>
<code>list</code>
</dd>
<span title="['Submit']"> <dt><b>Value:</b></dt>
<dd><table><tr><td>
<pre class="variable">
['Submit'] </pre>
</td></tr></table></dd>
</span> </dl>
</dd>
</dl></td></tr></table>
<br />
<!-- =========== START OF NAVBAR =========== -->
<table class="navbar" border="0" width="100%" cellpadding="0" bgcolor="#a0c0ff" cellspacing="0">
<tr valign="center">
<th class="navbar"> <a class="navbar" href="twisted.html">Home</a> </th>
<th class="navbar"> <a class="navbar" href="trees.html">Trees</a> </th>
<th class="navbar"> <a class="navbar" href="indices.html">Index</a> </th>
<th class="navbar"> <a class="navbar" href="help.html">Help</a> </th>
<th class="navbar" align="right" width="100%">
<table border="0" cellpadding="0" cellspacing="0">
<tr><th class="navbar" align="center">
<p class="nomargin">
<a class="navbar" target="_top" href="http://twistedmatrix.com/">Twisted 1.3.0rc1</a>
</p></th></tr></table>
</th>
</tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td align="left"><font size="-2">Generated by Epydoc 2.0 on Sat May 15 20:08:48 2004</font></td>
<td align="right"><a href="http://epydoc.sourceforge.net"
><font size="-2">http://epydoc.sf.net</font></a></td>
</tr>
</table>
</body>
</html>