Merge pull request #38 from Khan/fix_zipimport

Add zipimport compatability to ResourceHandler 
diff --git a/python/src/pipeline/status_ui.py b/python/src/pipeline/status_ui.py
index 0f260d5..60fe036 100644
--- a/python/src/pipeline/status_ui.py
+++ b/python/src/pipeline/status_ui.py
@@ -20,6 +20,7 @@
 import os
 import pkgutil
 import traceback
+import zipfile
 
 from google.appengine.api import users
 from google.appengine.ext import webapp
@@ -92,14 +93,23 @@
 
     relative_path, content_type = self._RESOURCE_MAP[resource]
     path = os.path.join(os.path.dirname(__file__), relative_path)
+
+    # It's possible we're inside a zipfile (zipimport).  If so,
+    # __file__ will start with 'something.zip'.
+    if ('.zip' + os.sep) in path:
+      (zip_file, zip_path) = os.path.relpath(path).split('.zip' + os.sep, 1)
+      content = zipfile.ZipFile(zip_file + '.zip').read(zip_path)
+    else:
+      try:
+        content = pkgutil.get_data(__name__, relative_path)
+      except AttributeError:  # Python < 2.6.
+        content = open(path, 'rb').read()
+
     if not pipeline._DEBUG:
       self.response.headers["Cache-Control"] = "public, max-age=300"
     self.response.headers["Content-Type"] = content_type
-    try:
-      data = pkgutil.get_data(__name__, relative_path)
-    except AttributeError:  # Python < 2.6.
-      data = None
-    self.response.out.write(data or open(path, 'rb').read())
+
+    self.response.out.write(content)
 
 
 class _BaseRpcHandler(webapp.RequestHandler):