cmlenz@57: from cgi import escape cmlenz@57: from datetime import datetime, timedelta cmlenz@57: import os cmlenz@57: import sys cmlenz@57: cmlenz@57: def markup(dirname): cmlenz@57: from markup.template import Context, TemplateLoader cmlenz@57: loader = TemplateLoader([dirname], False) cmlenz@57: template = loader.load('template.html') cmlenz@57: def render(): cmlenz@57: ctxt = Context(title='Just a test', cmlenz@57: items=['Number %d' % num for num in range(1, 15)]) cmlenz@57: template.generate(ctxt).render('html') cmlenz@57: return render cmlenz@57: cmlenz@57: def cheetah(dirname): cmlenz@57: # FIXME: infinite recursion somewhere... WTF? cmlenz@59: try: cmlenz@59: from Cheetah.Template import Template cmlenz@59: class MyTemplate(Template): cmlenz@59: def serverSidePath(self, path): return os.path.join(dirname, path) cmlenz@59: filename = os.path.join(dirname, 'template.tmpl') cmlenz@59: template = MyTemplate(file=filename) cmlenz@57: cmlenz@59: def render(): cmlenz@59: template = MyTemplate(file=filename, cmlenz@59: searchList=[{'title': 'Just a test', cmlenz@59: 'items': [u'Number %d' % num for num in range(1, 15)]}]) cmlenz@59: template.respond() cmlenz@59: return render cmlenz@59: except ImportError: cmlenz@59: return None cmlenz@57: cmlenz@57: def clearsilver(dirname): cmlenz@59: try: cmlenz@59: import neo_cgi cmlenz@59: neo_cgi.update() cmlenz@59: import neo_util cmlenz@59: import neo_cs cmlenz@59: def render(): cmlenz@59: hdf = neo_util.HDF() cmlenz@59: hdf.setValue('hdf.loadpaths.0', dirname) cmlenz@59: hdf.setValue('title', escape('Just a test')) cmlenz@59: for num in range(1, 15): cmlenz@59: hdf.setValue('items.%d' % (num - 1), escape('Number %d' % num)) cmlenz@59: cs = neo_cs.CS(hdf) cmlenz@59: cs.parseFile('template.cs') cmlenz@59: cs.render() cmlenz@59: return render cmlenz@59: except ImportError: cmlenz@59: return None cmlenz@57: cmlenz@57: def kid(dirname): cmlenz@59: try: cmlenz@59: import kid cmlenz@59: kid.path = kid.TemplatePath([dirname]) cmlenz@59: template = kid.Template(file='template.kid') cmlenz@59: def render(): cmlenz@59: template = kid.Template(file='template.kid', cmlenz@59: title='Just a test', cmlenz@59: items=['Number %d' % num for num in range(1, 15)]) cmlenz@59: template.serialize(output='xhtml') cmlenz@59: return render cmlenz@59: except ImportError: cmlenz@59: return None cmlenz@57: cmlenz@57: def main(): cmlenz@57: basepath = os.path.abspath(os.path.dirname(__file__)) cmlenz@57: for engine in ('markup', 'clearsilver', 'kid'): cmlenz@57: dirname = os.path.join(basepath, engine) cmlenz@57: print '%s:' % engine.capitalize() cmlenz@57: func = globals()[engine](dirname) cmlenz@59: if not func: cmlenz@59: print 'Skipping %s, not installed?' % engine.capitalize() cmlenz@59: continue cmlenz@59: times = [] cmlenz@59: for i in range(100): cmlenz@59: start = datetime.now() cmlenz@59: sys.stdout.write('.') cmlenz@59: sys.stdout.flush() cmlenz@59: func() cmlenz@59: times.append(datetime.now() - start) cmlenz@59: cmlenz@59: print cmlenz@59: total_ms = sum([t.seconds * 1000 + t.microseconds for t in times]) cmlenz@59: print ' --> timing: %s (avg), %s (min), %s (max)' % ( cmlenz@59: timedelta(microseconds=total_ms / len(times)), cmlenz@59: timedelta(microseconds=min([t.seconds * 1000 + t.microseconds for t in times])), cmlenz@59: timedelta(microseconds=max([t.seconds * 1000 + t.microseconds for t in times]))) cmlenz@57: print cmlenz@57: cmlenz@57: if __name__ == '__main__': cmlenz@57: main()