Index: utils.py |
diff --git a/utils.py b/utils.py |
index ac3014ae675e7cf67fd33965c7f4f5a2eb13195b..c00776e6756469db9a9a49b110cef0e180b8a993 100644 |
--- a/utils.py |
+++ b/utils.py |
@@ -4,6 +4,7 @@ |
# version 2.0 (the "License"). You can obtain a copy of the License at |
# http://mozilla.org/MPL/2.0/. |
+from contextlib import closing |
import os |
import platform |
from StringIO import StringIO |
@@ -11,28 +12,35 @@ import sys |
import urllib |
import zipfile |
+JSSHELL_DIR = "mozilla-esr31" |
+JSSHELL_URL = ("https://ftp.mozilla.org/pub/mozilla.org/firefox/nightly" |
+ "/2015/02/2015-02-25-00-22-19-%s/jsshell-%%s.zip" % JSSHELL_DIR) |
+ |
+JSSHELL_SUPPORTED_PLATFORMS = { |
+ "win32": "win32", |
+ "linux2": { |
+ "i686": "linux-i686", |
+ "x86_64": "linux-x86_64" |
+ }, |
+ "darwin": "mac" |
+} |
+ |
def ensureJSShell(): |
baseDir = os.path.dirname(__file__) |
- shell_dir = os.path.join(baseDir, 'mozilla') |
+ shell_dir = os.path.join(baseDir, JSSHELL_DIR) |
+ |
if not os.path.exists(shell_dir): |
os.makedirs(shell_dir) |
if sys.platform == 'win32': |
path = os.path.join(shell_dir, 'js.exe') |
else: |
path = os.path.join(shell_dir, 'js') |
+ |
if os.path.exists(path): |
return path |
- supported_platforms = { |
- 'win32': 'win32', |
- 'linux2': { |
- 'i686': 'linux-i686', |
- 'x86_64': 'linux-x86_64' |
- }, |
- 'darwin': 'mac', |
- } |
try: |
- build = supported_platforms[sys.platform] |
+ build = JSSHELL_SUPPORTED_PLATFORMS[sys.platform] |
if isinstance(build, dict): |
build = build[platform.machine()] |
except KeyError: |
@@ -40,11 +48,9 @@ def ensureJSShell(): |
sys.platform, platform.machine() |
)) |
- download_url = 'https://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/2015/02/2015-02-25-00-22-19-mozilla-esr31/jsshell-%s.zip' % build |
- data = StringIO(urllib.urlopen(download_url).read()) |
- zip = zipfile.ZipFile(data) |
- zip.extractall(shell_dir) |
- zip.close() |
+ with closing(urllib.urlopen(JSSHELL_URL % build)) as response, \ |
+ zipfile.ZipFile(StringIO(response.read())) as zip: |
+ zip.extractall(shell_dir) |
if not os.path.exists(path): |
raise Exception('Downloaded package didn\'t contain JS shell executable') |