Skip to content

Commit af13670

Browse files
committed
- [bug] The "benchmark" example is now Python 3 compatible
(even though several of those old template libs aren't available on Py3K, so YMMV) [ticket:175]
1 parent 6833bc1 commit af13670

File tree

2 files changed

+42
-22
lines changed

2 files changed

+42
-22
lines changed

CHANGES

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
for code blocks so that indentation is preserved
5959
[ticket:173]
6060

61+
- [bug] The "benchmark" example is now Python 3 compatible
62+
(even though several of those old template libs aren't
63+
available on Py3K, so YMMV) [ticket:175]
64+
6165
0.5
6266
- A Template is explicitly disallowed
6367
from having a url that normalizes to relative outside

examples/bench/basic.py

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,19 @@
3030

3131
from cgi import escape
3232
import os
33-
from StringIO import StringIO
33+
try:
34+
from StringIO import StringIO
35+
except ImportError:
36+
from io import StringIO
3437
import sys
3538
import timeit
3639

40+
def u(stringlit):
41+
if sys.version_info >= (3,):
42+
return stringlit
43+
else:
44+
return stringlit.decode('latin1')
45+
3746
__all__ = ['mako', 'mako_inheritance', 'cheetah', 'django', 'myghty', 'genshi', 'kid']
3847

3948
def genshi(dirname, verbose=False):
@@ -46,7 +55,7 @@ def render():
4655
return template.generate(**data).render('xhtml')
4756

4857
if verbose:
49-
print render()
58+
print(render())
5059
return render
5160

5261
def myghty(dirname, verbose=False):
@@ -59,18 +68,19 @@ def render():
5968
interpreter.execute("template.myt", request_args=data, out_buffer=buffer)
6069
return buffer.getvalue()
6170
if verbose:
62-
print render()
71+
print(render())
6372
return render
6473

6574
def mako(dirname, verbose=False):
6675
from mako.template import Template
6776
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)
6979
template = lookup.get_template('template.html')
7080
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)])
7282
if verbose:
73-
print template.code, render()
83+
print(template.code + " " + render())
7484
return render
7585
mako_inheritance = mako
7686

@@ -80,13 +90,13 @@ def cheetah(dirname, verbose=False):
8090
template = Template(file=filename)
8191
def render():
8292
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)]})
8494
return template.respond()
8595

8696
if verbose:
87-
print dir(template)
88-
print template.generatedModuleCode()
89-
print render()
97+
print(dir(template))
98+
print(template.generatedModuleCode())
99+
print(render())
90100
return render
91101

92102
def django(dirname, verbose=False):
@@ -103,7 +113,7 @@ def render():
103113
return tmpl.render(template.Context(data))
104114

105115
if verbose:
106-
print render()
116+
print(render())
107117
return render
108118

109119
def kid(dirname, verbose=False):
@@ -117,7 +127,7 @@ def render():
117127
return template.serialize(output='xhtml')
118128

119129
if verbose:
120-
print render()
130+
print(render())
121131
return render
122132

123133

@@ -126,20 +136,20 @@ def run(engines, number=2000, verbose=False):
126136
for engine in engines:
127137
dirname = os.path.join(basepath, engine)
128138
if verbose:
129-
print '%s:' % engine.capitalize()
130-
print '--------------------------------------------------------'
139+
print('%s:' % engine.capitalize())
140+
print('--------------------------------------------------------')
131141
else:
132-
print '%s:' % engine.capitalize(),
142+
sys.stdout.write('%s:' % engine.capitalize())
133143
t = timeit.Timer(setup='from __main__ import %s; render = %s(r"%s", %s)'
134144
% (engine, engine, dirname, verbose),
135145
stmt='render()')
136146

137147
time = t.timeit(number=number) / number
138148
if verbose:
139-
print '--------------------------------------------------------'
140-
print '%.2f ms' % (1000 * time)
149+
print('--------------------------------------------------------')
150+
print('%.2f ms' % (1000 * time))
141151
if verbose:
142-
print '--------------------------------------------------------'
152+
print('--------------------------------------------------------')
143153

144154

145155
if __name__ == '__main__':
@@ -150,10 +160,16 @@ def run(engines, number=2000, verbose=False):
150160
verbose = '-v' in sys.argv
151161

152162
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")
157173
stats.strip_dirs()
158174
stats.sort_stats('time', 'calls')
159175
stats.print_stats()

0 commit comments

Comments
 (0)