# HG changeset patch
# User cmlenz
# Date 1154688624 0
# Node ID aa69c1f34a264475284cf18da98a7af9fcf89dc8
# Parent fad93ea1e6e90b6582b4250526b1588c49dbc755
Added Django to the [wiki:MarkupPerformance#bigtablebenchmark bigtable benchmark], based on patch contributed by Simon Willison (#23). Also, changed the benchmark so that Clearsilver, Kid, and Django are not required to run the benchmark.
diff --git a/examples/bench/bigtable.py b/examples/bench/bigtable.py
--- a/examples/bench/bigtable.py
+++ b/examples/bench/bigtable.py
@@ -11,13 +11,30 @@
import cElementTree as cet
from elementtree import ElementTree as et
-import kid
from markup.builder import tag
from markup.template import Context, Template
import neo_cgi
import neo_cs
import neo_util
+try:
+ import neo_cgi, neo_cs, neo_util
+except ImportError:
+ neo_cgi = None
+
+try:
+ import kid
+except ImportError:
+ kid = None
+
+try:
+ from django.conf import settings
+ settings.configure()
+ from django.template import Context as DjangoContext
+ from django.template import Template as DjangoTemplate
+except ImportError:
+ DjangoContext = DjangoTemplate = None
+
table = [dict(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10)
for x in range(1000)]
@@ -33,18 +50,19 @@
""")
-kid_tmpl = kid.Template("""
-
-""")
+if DjangoTemplate:
+ django_tmpl = DjangoTemplate("""
+
+ {% for row in table %}
+ {% for col in row.values %}{{ col|escape }}{% endfor %}
+ {% endfor %}
+
+ """)
-kid_tmpl2 = kid.Template("""
-$table
-""")
-
+ def test_django():
+ """Djange template"""
+ context = DjangoContext({'table': table})
+ django_tmpl.render(context)
def test_markup():
"""Markup template"""
@@ -72,20 +90,33 @@
]).generate()
stream.render('html', strip_whitespace=False)
-def test_kid():
- """Kid template"""
- kid_tmpl.table = table
- kid_tmpl.serialize(output='html')
+if kid:
+ kid_tmpl = kid.Template("""
+
+ """)
-def test_kid_et():
- """Kid template + cElementTree"""
- _table = cet.Element('table')
- for row in table:
- td = cet.SubElement(_table, 'tr')
- for c in row.values():
- cet.SubElement(td, 'td').text=str(c)
- kid_tmpl2.table = _table
- kid_tmpl2.serialize(output='html')
+ kid_tmpl2 = kid.Template("""
+ $table
+ """)
+
+ def test_kid():
+ """Kid template"""
+ kid_tmpl.table = table
+ kid_tmpl.serialize(output='html')
+
+ def test_kid_et():
+ """Kid template + cElementTree"""
+ _table = cet.Element('table')
+ for row in table:
+ td = cet.SubElement(_table, 'tr')
+ for c in row.values():
+ cet.SubElement(td, 'td').text=str(c)
+ kid_tmpl2.table = _table
+ kid_tmpl2.serialize(output='html')
def test_et():
"""ElementTree"""
@@ -105,37 +136,42 @@
cet.SubElement(tr, 'td').text=str(c)
cet.tostring(_table)
-def test_clearsilver():
- """ClearSilver"""
- hdf = neo_util.HDF()
- for i, row in enumerate(table):
- for j, c in enumerate(row.values()):
- hdf.setValue("rows.%d.cell.%d" % (i, j), cgi.escape(str(c)))
+if neo_cgi:
+ def test_clearsilver():
+ """ClearSilver"""
+ hdf = neo_util.HDF()
+ for i, row in enumerate(table):
+ for j, c in enumerate(row.values()):
+ hdf.setValue("rows.%d.cell.%d" % (i, j), cgi.escape(str(c)))
- cs = neo_cs.CS(hdf)
- cs.parseStr("""
+ cs = neo_cs.CS(hdf)
+ cs.parseStr("""
""")
- cs.render()
+ cs.render()
def run(which=None, number=10):
tests = ['test_builder', 'test_markup', 'test_markup_builder', 'test_kid',
- 'test_kid_et', 'test_et', 'test_cet', 'test_clearsilver']
+ 'test_kid_et', 'test_et', 'test_cet', 'test_clearsilver',
+ 'test_django']
if which:
tests = filter(lambda n: n[5:] in which, tests)
- for test in tests:
+ for test in [t for t in tests if hasattr(sys.modules[__name__], t)]:
t = timeit.Timer(setup='from __main__ import %s;' % test,
stmt='%s()' % test)
time = t.timeit(number=number) / number
- print '%-35s %8.2f ms' % (getattr(sys.modules[__name__], test).__doc__,
- 1000 * time)
+ if time < 0.00001:
+ result = ' (not installed?)'
+ else:
+ result = '%16.2f ms' % (1000 * time)
+ print '%-35s %s' % (getattr(sys.modules[__name__], test).__doc__, result)
if __name__ == '__main__':