30
30
31
31
from cgi import escape
32
32
import os
33
- from StringIO import StringIO
33
+ try :
34
+ from StringIO import StringIO
35
+ except ImportError :
36
+ from io import StringIO
34
37
import sys
35
38
import timeit
36
39
40
+ def u (stringlit ):
41
+ if sys .version_info >= (3 ,):
42
+ return stringlit
43
+ else :
44
+ return stringlit .decode ('latin1' )
45
+
37
46
__all__ = ['mako' , 'mako_inheritance' , 'cheetah' , 'django' , 'myghty' , 'genshi' , 'kid' ]
38
47
39
48
def genshi (dirname , verbose = False ):
@@ -46,7 +55,7 @@ def render():
46
55
return template .generate (** data ).render ('xhtml' )
47
56
48
57
if verbose :
49
- print render ()
58
+ print ( render () )
50
59
return render
51
60
52
61
def myghty (dirname , verbose = False ):
@@ -59,18 +68,19 @@ def render():
59
68
interpreter .execute ("template.myt" , request_args = data , out_buffer = buffer )
60
69
return buffer .getvalue ()
61
70
if verbose :
62
- print render ()
71
+ print ( render () )
63
72
return render
64
73
65
74
def mako (dirname , verbose = False ):
66
75
from mako .template import Template
67
76
from mako .lookup import TemplateLookup
68
- lookup = TemplateLookup (directories = [dirname ], filesystem_checks = False , disable_unicode = True )
77
+ disable_unicode = (sys .version_info < (3 ,))
78
+ lookup = TemplateLookup (directories = [dirname ], filesystem_checks = False , disable_unicode = disable_unicode )
69
79
template = lookup .get_template ('template.html' )
70
80
def render ():
71
- return template .render (title = "Just a test" , user = "joe" , list_items = [u'Number %d' % num for num in range (1 ,15 )])
81
+ return template .render (title = "Just a test" , user = "joe" , list_items = [u ( 'Number %d' ) % num for num in range (1 ,15 )])
72
82
if verbose :
73
- print template .code , render ()
83
+ print ( template .code + " " + render () )
74
84
return render
75
85
mako_inheritance = mako
76
86
@@ -80,13 +90,13 @@ def cheetah(dirname, verbose=False):
80
90
template = Template (file = filename )
81
91
def render ():
82
92
template .__dict__ .update ({'title' : 'Just a test' , 'user' : 'joe' ,
83
- 'list_items' : [u'Number %d' % num for num in range (1 , 15 )]})
93
+ 'list_items' : [u ( 'Number %d' ) % num for num in range (1 , 15 )]})
84
94
return template .respond ()
85
95
86
96
if verbose :
87
- print dir (template )
88
- print template .generatedModuleCode ()
89
- print render ()
97
+ print ( dir (template ) )
98
+ print ( template .generatedModuleCode () )
99
+ print ( render () )
90
100
return render
91
101
92
102
def django (dirname , verbose = False ):
@@ -103,7 +113,7 @@ def render():
103
113
return tmpl .render (template .Context (data ))
104
114
105
115
if verbose :
106
- print render ()
116
+ print ( render () )
107
117
return render
108
118
109
119
def kid (dirname , verbose = False ):
@@ -117,7 +127,7 @@ def render():
117
127
return template .serialize (output = 'xhtml' )
118
128
119
129
if verbose :
120
- print render ()
130
+ print ( render () )
121
131
return render
122
132
123
133
@@ -126,20 +136,20 @@ def run(engines, number=2000, verbose=False):
126
136
for engine in engines :
127
137
dirname = os .path .join (basepath , engine )
128
138
if verbose :
129
- print '%s:' % engine .capitalize ()
130
- print '--------------------------------------------------------'
139
+ print ( '%s:' % engine .capitalize () )
140
+ print ( '--------------------------------------------------------' )
131
141
else :
132
- print '%s:' % engine .capitalize (),
142
+ sys . stdout . write ( '%s:' % engine .capitalize ())
133
143
t = timeit .Timer (setup = 'from __main__ import %s; render = %s(r"%s", %s)'
134
144
% (engine , engine , dirname , verbose ),
135
145
stmt = 'render()' )
136
146
137
147
time = t .timeit (number = number ) / number
138
148
if verbose :
139
- print '--------------------------------------------------------'
140
- print '%.2f ms' % (1000 * time )
149
+ print ( '--------------------------------------------------------' )
150
+ print ( '%.2f ms' % (1000 * time ) )
141
151
if verbose :
142
- print '--------------------------------------------------------'
152
+ print ( '--------------------------------------------------------' )
143
153
144
154
145
155
if __name__ == '__main__' :
@@ -150,10 +160,16 @@ def run(engines, number=2000, verbose=False):
150
160
verbose = '-v' in sys .argv
151
161
152
162
if '-p' in sys .argv :
153
- import hotshot , hotshot .stats
154
- prof = hotshot .Profile ("template.prof" )
155
- benchtime = prof .runcall (run , engines , number = 100 , verbose = verbose )
156
- stats = hotshot .stats .load ("template.prof" )
163
+ try :
164
+ import hotshot , hotshot .stats
165
+ prof = hotshot .Profile ("template.prof" )
166
+ benchtime = prof .runcall (run , engines , number = 100 , verbose = verbose )
167
+ stats = hotshot .stats .load ("template.prof" )
168
+ except ImportError :
169
+ import cProfile , pstats
170
+ stmt = "run(%r, number=%r, verbose=%r)" % (engines , 1000 , verbose )
171
+ cProfile .runctx (stmt , globals (), {}, "template.prof" )
172
+ stats = pstats .Stats ("template.prof" )
157
173
stats .strip_dirs ()
158
174
stats .sort_stats ('time' , 'calls' )
159
175
stats .print_stats ()
0 commit comments