]> git.ozlabs.org Git - hiprofile/blobdiff - hiprofile.py
Include package & version info in report footers
[hiprofile] / hiprofile.py
index 212fbf13e76a32e8dd26fdbb650fd387df5edb12..6f99d3c3e176338653b45736d4fc1be34d5a04f4 100644 (file)
@@ -6,11 +6,17 @@ import shutil
 import os
 import socket
 from xml.dom.minidom import parse as parseXML
-from django.template.loader import render_to_string
+from jinja2 import Environment, FileSystemLoader
 
 b_id = 0
 s_id = 0
 
+try:
+    __version__ = __import__('pkg_resources') \
+                    .get_distribution('hiprofile').version
+except Exception:
+    __version__ = 'unknown'
+
 def _get_count(node):
     """ Utility function: return the number in a 'count' element contained in
         the current node"""
@@ -306,24 +312,31 @@ def write_report(report, resourcedir, outdir):
 
     os.mkdir(outdir)
 
+    # set up template engine
+    env = Environment(loader = FileSystemLoader(resourcedir),
+                      autoescape = True)
+    templates = {}
+    for name in ['report', 'binary', 'symbol']:
+        templates[name] = env.get_template('%s.html' % name)
+
     # copy required files over
     files = ['style.css', 'hiprofile.js', 'bar.png', 'jquery-1.3.1.min.js']
     for file in files:
         shutil.copy(os.path.join(resourcedir, file), outdir)
 
-    f = open(os.path.join(outdir, 'index.html'), 'w')
-    f.write(render_to_string('report.html', { 'report': report }))
-    f.close()
+    reportfile = os.path.join(outdir, 'index.html')
+    templates['report'].stream(version = __version__,
+                               report = report).dump(reportfile)
 
     for binary in report.binaries:
-        f = open(os.path.join(outdir, binary.filename()), 'w')
-        f.write(render_to_string('binary.html',
-                    { 'report': report, 'binary': binary }))
-        f.close()
-
-        for ref in binary.references:
-            f = open(os.path.join(outdir, ref.filename()), 'w')
-            f.write(render_to_string('symbol.html',
-                        { 'report': report, 'binary': binary, 'symbol': ref }))
-            f.close()
-
+        binaryfile = os.path.join(outdir, binary.filename())
+        templates['binary'].stream(version = __version__,
+                                   report = report,
+                                   binary = binary) \
+                                    .dump(binaryfile)
+
+        for symbol in binary.references:
+            symbolfile = os.path.join(outdir, symbol.filename())
+            templates['symbol'].stream(version = __version__,
+                                       report = report, binary = binary,
+                                       symbol = symbol).dump(symbolfile)