4.2 Static placeholder

The template:

Cached variable:  $*voom

The command line and output:

% voom='Voom!' python x.py --env
Cached variable:  Voom!

The generated code, with line numbers:

 1  write('Cached variable:  ')
 2  ## START CACHE REGION: at line, col (1, 19) in the source.
 3  RECACHE = True
 4  if not self._cacheData.has_key('19760169'):
 5      pass
 6  else:
 7      RECACHE = False
 8  if RECACHE:
 9      orig_trans = trans
10      trans = cacheCollector = DummyTransaction()
11      write = cacheCollector.response().write
12      write(filter(VFS(SL,"voom",1))) # generated from '$*voom' at line 1,
            # col 19.
13      trans = orig_trans
14      write = trans.response().write
15      self._cacheData['19760169'] = cacheCollector.response().getvalue()
16      del cacheCollector
17  write(self._cacheData['19760169'])
18  ## END CACHE REGION
    
19  write('\n')

That one little star generated a whole lotta code. First, instead of an ordinary VFS lookup (searchList) lookup, it converted the placeholder to a lookup in the ._cacheData dictionary. Cheetah also generated a unique key ('19760169') for our cached item - this is its cache ID.

Second, Cheetah put a pair of if-blocks before the write. The first (lines 3-7) determine whether the cache value is missing or out of date, and sets local variable RECHARGE true or false. This stanza may look unnecessarily verbose - lines 3-7 could be eliminated if line 8 was changed to

if not self._cacheData.has_key('19760169'):
- but this model is expandable for some of the cache features we'll see below.

The second if-block, lines 8-16, do the cache updating if necessary. Clearly, the programmer is trying to stick as close to normal (dynamic) workflow as possible. Remember that write, even though it looks like a local function, is actually a method of a file-like object. So we create a temporary file-like object to divert the write object into, then read the result and stuff it into the cache.