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):