Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Unified Diff: testing_support/local_rietveld.py

Issue 1156923006: Install google appengine. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Improve the error message. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: testing_support/local_rietveld.py
diff --git a/testing_support/local_rietveld.py b/testing_support/local_rietveld.py
index 41b0166bf3c22a98774d24b0c27a70a36be3a229..77fc4db3f1249a7264f2780a2d23676d675dd5a5 100755
--- a/testing_support/local_rietveld.py
+++ b/testing_support/local_rietveld.py
@@ -10,6 +10,7 @@ It makes sure Google AppEngine SDK is found, download Rietveld and Django code
if necessary and starts the server on a free inbound TCP port.
"""
+import base64
import logging
import optparse
import os
@@ -18,6 +19,13 @@ import socket
import sys
import tempfile
import time
+import urllib2
+
+
+INSTALL_GOOGLE_APPENGINE_HASH = 'f849aad85ac3589c931197bff861faf0e2ef0ece'
+INSTALL_GOOGLE_APPENGINE_URL = (
+ 'https://chromium.googlesource.com/infra/infra/+/%s'
+ '/bootstrap/get_appengine.py?format=TEXT' % INSTALL_GOOGLE_APPENGINE_HASH)
pgervais 2015/05/28 20:51:46 Downloading code before executing it is dangerous.
try:
import subprocess2
@@ -63,23 +71,38 @@ class LocalRietveld(object):
self.test_server = None
self.port = None
self.tempdir = None
+ self.dev_app = None
- # Find the GAE SDK
- previous_dir = ''
- self.sdk_path = ''
- base_dir = self.base_dir
- while base_dir != previous_dir:
- previous_dir = base_dir
- self.sdk_path = os.path.join(base_dir, 'google_appengine')
- if not os.path.isfile(os.path.join(self.sdk_path, 'VERSION')):
- base_dir = os.path.dirname(base_dir)
- self.dev_app = os.path.join(self.sdk_path, 'dev_appserver.py')
+ def urlfetch(self, url):
+ req = urllib2.Request(url)
+ req.add_header('User-Agent', 'depot_tools local_rietveld.py')
+ for i in range(4):
pgervais 2015/05/28 20:51:46 Please use an exponential backoff here.
+ try:
+ return urllib2.urlopen(req).read()
+ except urllib2.URLError:
+ if i == 3:
+ raise
+
+ def download_base64_and_run(self, url, dest, args=None):
+ with open(dest, 'wb') as f:
+ f.write(base64.b64decode(self.urlfetch(url)))
+ os.chmod(dest, 0755)
+ cmd = [dest]
+ if args:
+ cmd.extend(args)
+ try:
+ subprocess2.check_call(cmd)
+ except (OSError, subprocess2.CalledProcessError), e:
+ raise Failure('Failed to run %s\n%s' % (cmd, e))
def install_prerequisites(self):
- # First, verify the Google AppEngine SDK is available.
- if not os.path.isfile(self.dev_app):
- raise Failure(
- 'Install google_appengine sdk in %s or higher up' % self.base_dir)
+ # First, install the Google AppEngine SDK.
+ self.download_base64_and_run(
+ INSTALL_GOOGLE_APPENGINE_URL,
+ '/tmp/get_appengine.py',
+ ['--dest=%s' % self.base_dir])
+ sdk_path = os.path.join(self.base_dir, 'google_appengine')
+ self.dev_app = os.path.join(sdk_path, 'dev_appserver.py')
if os.path.isdir(os.path.join(self.rietveld, '.hg')):
# Left over from mercurial. Delete it.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698