comparison examples/bench/basic.py @ 487:4811658d7ac0

Improve basic benchmark for Kid by storing the template class outside the render function. Closes #96.
author cmlenz
date Mon, 21 May 2007 09:11:36 +0000
parents 0e6ae0ade606
children 661715b49c0c 1837f39efd6f
comparison
equal deleted inserted replaced
485:770ba8556940 487:4811658d7ac0
1 # -*- encoding: utf-8 -*-
2 # Template language benchmarks
3 #
4 # Objective: Test general templating features using a small template
5
1 from cgi import escape 6 from cgi import escape
2 import os 7 import os
3 from StringIO import StringIO 8 from StringIO import StringIO
4 import sys 9 import sys
5 import timeit 10 import timeit
18 if verbose: 23 if verbose:
19 print render() 24 print render()
20 return render 25 return render
21 26
22 def myghty(dirname, verbose=False): 27 def myghty(dirname, verbose=False):
23 from myghty import interp 28 try:
29 from myghty import interp
30 except ImportError:
31 print>>sys.stderr, 'Mighty not installed, skipping'
32 return lambda: None
24 interpreter = interp.Interpreter(component_root=dirname) 33 interpreter = interp.Interpreter(component_root=dirname)
25 def render(): 34 def render():
26 data = dict(title='Just a test', user='joe', 35 data = dict(title='Just a test', user='joe',
27 items=['Number %d' % num for num in range(1, 15)]) 36 items=['Number %d' % num for num in range(1, 15)])
28 buffer = StringIO() 37 buffer = StringIO()
32 print render() 41 print render()
33 return render 42 return render
34 43
35 def cheetah(dirname, verbose=False): 44 def cheetah(dirname, verbose=False):
36 # FIXME: infinite recursion somewhere... WTF? 45 # FIXME: infinite recursion somewhere... WTF?
37 from Cheetah.Template import Template 46 try:
47 from Cheetah.Template import Template
48 except ImportError:
49 print>>sys.stderr, 'Cheetah not installed, skipping'
50 return lambda: None
38 class MyTemplate(Template): 51 class MyTemplate(Template):
39 def serverSidePath(self, path): return os.path.join(dirname, path) 52 def serverSidePath(self, path): return os.path.join(dirname, path)
40 filename = os.path.join(dirname, 'template.tmpl') 53 filename = os.path.join(dirname, 'template.tmpl')
41 template = MyTemplate(file=filename) 54 template = MyTemplate(file=filename)
42 55
52 65
53 def clearsilver(dirname, verbose=False): 66 def clearsilver(dirname, verbose=False):
54 try: 67 try:
55 import neo_cgi 68 import neo_cgi
56 except ImportError: 69 except ImportError:
57 return lambda:None 70 print>>sys.stderr, 'ClearSilver not installed, skipping'
71 return lambda: None
58 neo_cgi.update() 72 neo_cgi.update()
59 import neo_util 73 import neo_util
60 import neo_cs 74 import neo_cs
61 def render(): 75 def render():
62 hdf = neo_util.HDF() 76 hdf = neo_util.HDF()
72 if verbose: 86 if verbose:
73 print render() 87 print render()
74 return render 88 return render
75 89
76 def django(dirname, verbose=False): 90 def django(dirname, verbose=False):
77 from django.conf import settings 91 try:
78 settings.configure(TEMPLATE_DIRS=[os.path.join(dirname, 'templates')]) 92 from django.conf import settings
93 settings.configure(TEMPLATE_DIRS=[os.path.join(dirname, 'templates')])
94 except ImportError:
95 print>>sys.stderr, 'Django not installed, skipping'
96 return lambda: None
79 from django import template, templatetags 97 from django import template, templatetags
80 from django.template import loader 98 from django.template import loader
81 templatetags.__path__.append(os.path.join(dirname, 'templatetags')) 99 templatetags.__path__.append(os.path.join(dirname, 'templatetags'))
82 tmpl = loader.get_template('template.html') 100 tmpl = loader.get_template('template.html')
83 101
89 if verbose: 107 if verbose:
90 print render() 108 print render()
91 return render 109 return render
92 110
93 def kid(dirname, verbose=False): 111 def kid(dirname, verbose=False):
94 import kid 112 try:
113 import kid
114 except ImportError:
115 print>>sys.stderr, "SimpleTAL not installed, skipping"
116 return lambda: None
95 kid.path = kid.TemplatePath([dirname]) 117 kid.path = kid.TemplatePath([dirname])
96 template = kid.Template(file='template.kid') 118 template = kid.load_template('template.kid').Template
97 def render(): 119 def render():
98 template = kid.Template(file='template.kid', 120 return template(
99 title='Just a test', user='joe', 121 title='Just a test', user='joe',
100 items=['Number %d' % num for num in range(1, 15)]) 122 items=['Number %d' % num for num in range(1, 15)]
101 return template.serialize(output='xhtml') 123 ).serialize(output='xhtml')
102
103 if verbose:
104 print render()
105 return render
106
107 def nevow(dirname, verbose=False):
108 # FIXME: can't figure out the API
109 from nevow.loaders import xmlfile
110 template = xmlfile('template.xml', templateDir=dirname).load()
111 def render():
112 print template
113 124
114 if verbose: 125 if verbose:
115 print render() 126 print render()
116 return render 127 return render
117 128
118 def simpletal(dirname, verbose=False): 129 def simpletal(dirname, verbose=False):
119 from simpletal import simpleTAL, simpleTALES 130 try:
131 from simpletal import simpleTAL, simpleTALES
132 except ImportError:
133 print>>sys.stderr, "SimpleTAL not installed, skipping"
134 return lambda: None
120 fileobj = open(os.path.join(dirname, 'base.html')) 135 fileobj = open(os.path.join(dirname, 'base.html'))
121 base = simpleTAL.compileHTMLTemplate(fileobj) 136 base = simpleTAL.compileHTMLTemplate(fileobj)
122 fileobj.close() 137 fileobj.close()
123 fileobj = open(os.path.join(dirname, 'template.html')) 138 fileobj = open(os.path.join(dirname, 'template.html'))
124 template = simpleTAL.compileHTMLTemplate(fileobj) 139 template = simpleTAL.compileHTMLTemplate(fileobj)
Copyright (C) 2012-2017 Edgewall Software