11# basic.py - basic benchmarks adapted from Genshi
22# Copyright (C) 2006 Edgewall Software
33# All rights reserved.
4- #
4+ #
55# Redistribution and use in source and binary forms, with or without
66# modification, are permitted provided that the following conditions
77# are met:
8- #
8+ #
99# 1. Redistributions of source code must retain the above copyright
1010# notice, this list of conditions and the following disclaimer.
1111# 2. Redistributions in binary form must reproduce the above copyright
1515# 3. The name of the author may not be used to endorse or promote
1616# products derived from this software without specific prior
1717# written permission.
18- #
18+ #
1919# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
2020# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
2121# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
3333import timeit
3434
3535
36- __all__ = ['mako' , 'mako_inheritance' , 'jinja2' , 'jinja2_inheritance' ,
37- 'cheetah' , 'django' , 'myghty' , 'genshi' , 'kid' ]
36+ __all__ = [
37+ "mako" ,
38+ "mako_inheritance" ,
39+ "jinja2" ,
40+ "jinja2_inheritance" ,
41+ "cheetah" ,
42+ "django" ,
43+ "myghty" ,
44+ "genshi" ,
45+ "kid" ,
46+ ]
3847
3948# Templates content and constants
40- TITLE = 'Just a test'
41- USER = 'joe'
42- ITEMS = ['Number %d' % num for num in range (1 , 15 )]
49+ TITLE = "Just a test"
50+ USER = "joe"
51+ ITEMS = ["Number %d" % num for num in range (1 , 15 )]
52+
4353
4454def genshi (dirname , verbose = False ):
4555 from genshi .template import TemplateLoader
56+
4657 loader = TemplateLoader ([dirname ], auto_reload = False )
47- template = loader .load ('template.html' )
58+ template = loader .load ("template.html" )
59+
4860 def render ():
4961 data = dict (title = TITLE , user = USER , items = ITEMS )
50- return template .generate (** data ).render (' xhtml' )
62+ return template .generate (** data ).render (" xhtml" )
5163
5264 if verbose :
5365 print (render ())
5466 return render
5567
68+
5669def myghty (dirname , verbose = False ):
5770 from myghty import interp
71+
5872 interpreter = interp .Interpreter (component_root = dirname )
73+
5974 def render ():
6075 data = dict (title = TITLE , user = USER , items = ITEMS )
6176 buffer = StringIO ()
62- interpreter .execute ("template.myt" , request_args = data , out_buffer = buffer )
77+ interpreter .execute (
78+ "template.myt" , request_args = data , out_buffer = buffer
79+ )
6380 return buffer .getvalue ()
81+
6482 if verbose :
6583 print (render ())
6684 return render
6785
86+
6887def mako (dirname , verbose = False ):
6988 from mako .template import Template
7089 from mako .lookup import TemplateLookup
90+
7191 lookup = TemplateLookup (directories = [dirname ], filesystem_checks = False )
72- template = lookup .get_template ('template.html' )
92+ template = lookup .get_template ("template.html" )
93+
7394 def render ():
7495 return template .render (title = TITLE , user = USER , list_items = ITEMS )
96+
7597 if verbose :
7698 print (template .code + " " + render ())
7799 return render
100+
101+
78102mako_inheritance = mako
79103
104+
80105def jinja2 (dirname , verbose = False ):
81106 from jinja2 import Environment , FileSystemLoader
107+
82108 env = Environment (loader = FileSystemLoader (dirname ))
83- template = env .get_template ('template.html' )
109+ template = env .get_template ("template.html" )
110+
84111 def render ():
85112 return template .render (title = TITLE , user = USER , list_items = ITEMS )
113+
86114 if verbose :
87115 print (render ())
88116 return render
117+
118+
89119jinja2_inheritance = jinja2
90120
121+
91122def cheetah (dirname , verbose = False ):
92123 from Cheetah .Template import Template
93- filename = os .path .join (dirname , 'template.tmpl' )
124+
125+ filename = os .path .join (dirname , "template.tmpl" )
94126 template = Template (file = filename )
127+
95128 def render ():
96- template .__dict__ .update ({'title' : TITLE , 'user' : USER ,
97- 'list_items' : ITEMS })
129+ template .__dict__ .update (
130+ {"title" : TITLE , "user" : USER , "list_items" : ITEMS }
131+ )
98132 return template .respond ()
99133
100134 if verbose :
@@ -103,30 +137,37 @@ def render():
103137 print (render ())
104138 return render
105139
140+
106141def django (dirname , verbose = False ):
107142 from django .conf import settings
108- settings .configure (TEMPLATE_DIRS = [os .path .join (dirname , 'templates' )])
143+
144+ settings .configure (TEMPLATE_DIRS = [os .path .join (dirname , "templates" )])
109145 from django import template , templatetags
110146 from django .template import loader
111- templatetags .__path__ .append (os .path .join (dirname , 'templatetags' ))
112- tmpl = loader .get_template ('template.html' )
147+
148+ templatetags .__path__ .append (os .path .join (dirname , "templatetags" ))
149+ tmpl = loader .get_template ("template.html" )
113150
114151 def render ():
115- data = {' title' : TITLE , ' user' : USER , ' items' : ITEMS }
152+ data = {" title" : TITLE , " user" : USER , " items" : ITEMS }
116153 return tmpl .render (template .Context (data ))
117154
118155 if verbose :
119156 print (render ())
120157 return render
121158
159+
122160def kid (dirname , verbose = False ):
123161 import kid
162+
124163 kid .path = kid .TemplatePath ([dirname ])
125- template = kid .Template (file = 'template.kid' )
164+ template = kid .Template (file = "template.kid" )
165+
126166 def render ():
127- template = kid .Template (file = 'template.kid' ,
128- title = TITLE , user = USER , items = ITEMS )
129- return template .serialize (output = 'xhtml' )
167+ template = kid .Template (
168+ file = "template.kid" , title = TITLE , user = USER , items = ITEMS
169+ )
170+ return template .serialize (output = "xhtml" )
130171
131172 if verbose :
132173 print (render ())
@@ -138,42 +179,46 @@ def run(engines, number=2000, verbose=False):
138179 for engine in engines :
139180 dirname = os .path .join (basepath , engine )
140181 if verbose :
141- print (' %s:' % engine .capitalize ())
142- print (' --------------------------------------------------------' )
182+ print (" %s:" % engine .capitalize ())
183+ print (" --------------------------------------------------------" )
143184 else :
144- sys .stdout .write ('%s:' % engine .capitalize ())
145- t = timeit .Timer (setup = 'from __main__ import %s; render = %s(r"%s", %s)'
146- % (engine , engine , dirname , verbose ),
147- stmt = 'render()' )
185+ sys .stdout .write ("%s:" % engine .capitalize ())
186+ t = timeit .Timer (
187+ setup = 'from __main__ import %s; render = %s(r"%s", %s)'
188+ % (engine , engine , dirname , verbose ),
189+ stmt = "render()" ,
190+ )
148191
149192 time = t .timeit (number = number ) / number
150193 if verbose :
151- print (' --------------------------------------------------------' )
152- print (' %.2f ms' % (1000 * time ))
194+ print (" --------------------------------------------------------" )
195+ print (" %.2f ms" % (1000 * time ))
153196 if verbose :
154- print (' --------------------------------------------------------' )
197+ print (" --------------------------------------------------------" )
155198
156199
157- if __name__ == ' __main__' :
158- engines = [arg for arg in sys .argv [1 :] if arg [0 ] != '-' ]
200+ if __name__ == " __main__" :
201+ engines = [arg for arg in sys .argv [1 :] if arg [0 ] != "-" ]
159202 if not engines :
160203 engines = __all__
161204
162- verbose = '-v' in sys .argv
205+ verbose = "-v" in sys .argv
163206
164- if '-p' in sys .argv :
207+ if "-p" in sys .argv :
165208 try :
166209 import hotshot , hotshot .stats
210+
167211 prof = hotshot .Profile ("template.prof" )
168212 benchtime = prof .runcall (run , engines , number = 100 , verbose = verbose )
169213 stats = hotshot .stats .load ("template.prof" )
170214 except ImportError :
171215 import cProfile , pstats
216+
172217 stmt = "run(%r, number=%r, verbose=%r)" % (engines , 1000 , verbose )
173218 cProfile .runctx (stmt , globals (), {}, "template.prof" )
174219 stats = pstats .Stats ("template.prof" )
175220 stats .strip_dirs ()
176- stats .sort_stats (' time' , ' calls' )
221+ stats .sort_stats (" time" , " calls" )
177222 stats .print_stats ()
178223 else :
179224 run (engines , verbose = verbose )
0 commit comments