# 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 @@ $table
""") -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__':