1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/docs/attributes.html Fri Nov 25 16:51:54 2005 +0000
1.3 @@ -0,0 +1,37 @@
1.4 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
1.5 +<html xmlns="http://www.w3.org/1999/xhtml"><head>
1.6 + <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type" />
1.7 +
1.8 + <title>Transaction Attributes</title><meta name="generator" content="amaya 8.1a, see http://www.w3.org/Amaya/" />
1.9 + <link href="styles.css" rel="stylesheet" type="text/css" /></head>
1.10 +<body>
1.11 +<h1>Transaction Attributes</h1>
1.12 +<p>Sometimes, an application will process an incoming request using a number of different resource objects. For example, in the <a href="paths-filesystem.html">"Treating the Path Like a Filesystem"</a> document, an example is given which involves a number of <code>MapResource</code>
1.13 +objects arranged in a hierarchy, and whilst such objects are used
1.14 +merely to select other resources which are then used to provide some
1.15 +kind of output, there may be other situations where such objects may
1.16 +need to record some information about their activities, so that the
1.17 +output-producing resource may customise the output accordingly.</p><p>In the example mentioned above, let
1.18 +us consider the effect of replacing the special mapping from explicitly
1.19 +specified year numbers with a new resource object that recognises
1.20 +year numbers and dispatches requests to other resources:</p><pre>news_resource = YearResource({"document.html" : document_resource, "article.html" : article_resource})<br />documents_resource = MapResource({"news" : news_resource})<br />top_resource = MapResource({"documents" : documents_resource})</pre><p>What <code>YearResource</code> objects would do is to take the year number from the URL (see <a href="paths.html">"URLs and Paths"</a>)
1.21 +and then to match a name in the dictionary it was initialised with, in
1.22 +order to dispatch the transaction to a suitable resource. However, it
1.23 +is likely that the year number is important to such resources: we would
1.24 +expect to see a different Web page for <code>document.html</code> in <code>2005</code> than in <code>2004</code>, for example. Consequently, the <code>YearResource</code> needs a way to communicate such information to other resources.</p><p>Although we could provide special methods or change the parameters of the <code>respond</code> method in the <code>document_resource</code> and <code>article_resource</code>
1.25 +objects in order to create a "channel" through which year information
1.26 +could be passed, an alternative is to retain the existing interface and
1.27 +behaviour of those objects and to store such information in the
1.28 +transaction object itself. Since the transaction is essential in
1.29 +the processing of any incoming request, we can be certain that it will
1.30 +be available to store and to provide such information when necessary. </p><h2>Using Transaction Attributes</h2>
1.31 +<p>We may obtain the attributes from the transaction by performing a method call as follows:</p><pre> # In the respond method...<br /> attributes = trans.get_attributes()</pre><p>This
1.32 +will provide a dictionary mapping names to attribute values. The
1.33 +structure of the values is not strictly defined, and it is the
1.34 +application's role to enforce its own rules on the data stored in the
1.35 +attributes dictionary.</p><p>Setting and getting values is as straightforward as using a normal dictionary:</p>
1.36 +<pre> # Continuing from above...<br /> attributes["year"] = year<br /> # Later...<br /> if attributes.has_key("year"):<br /> year = attributes["year"]<br /></pre><p>As described in the <a href="../apidocs/public/WebStack.Generic.Transaction-class.html#get_attributes">API documentation</a>,
1.37 +the attributes dictionary exists as long as the transaction object
1.38 +itself. Should information need to be stored beyond the lifetime of a
1.39 +transaction, the appropriate persistent information facilities should
1.40 +be used instead - see <a href="sessions.html">"Sessions and Persistent Information"</a> for more details.</p></body></html>
1.41 \ No newline at end of file