Chromium Code Reviews| Index: tools/testing/webdriver_test_setup.py |
| diff --git a/tools/testing/webdriver_test_setup.py b/tools/testing/webdriver_test_setup.py |
| index 7988bab5a591124c75b8777d0f7bb54fd9d2cd3b..66e65b1acf77b693452bc937f252f022b179ee9d 100755 |
| --- a/tools/testing/webdriver_test_setup.py |
| +++ b/tools/testing/webdriver_test_setup.py |
| @@ -81,93 +81,51 @@ def find_depot_tools_location(is_buildbot): |
| raise Exception("Could not find depot_tools in your path.") |
| -class GoogleCodeInstaller(object): |
| - """Install code that is being hosted on Google Code.""" |
| +class ChromeDriverInstaller(object): |
|
Emily Fortuna
2013/10/21 17:19:38
This is a bad idea as the Dart browser driver does
|
| + """Install ChromeDriver from Google Storage.""" |
| - def __init__(self, project_name, download_location, download_name_func): |
| - """ Create a object that will install code from a Google Code site. |
| + def __init__(self, download_location): |
| + """ Create an object that will install ChromeDriver from Google Storage. |
| Arguments: |
| - project_name - The GoogleCode project name such as "selenium" or |
| - "chromedriver." |
| download_location - Where to download the desired file on our filesystem. |
| - download_name_func - A function that takes a dictionary (currently with keys |
| - "os" and "version", but more can be added) that calculates the string |
| - representing the name of the download we want. |
| """ |
| - self.project_name = project_name |
| self.download_location = download_location |
| - self.download_name_func = download_name_func |
| - self.download_regex_str = self.download_name_func({'os': self.get_os_str, |
| - 'version': '.+'}) |
| + self.project_name = 'chromedriver' |
| + self.google_storage_downloads_page = 'http://chromedriver.storage.googleapis.com' |
| - def google_code_downloads_page(self): |
| - return 'http://code.google.com/p/%s/downloads/list' % self.project_name |
| - |
| - def google_code_download(self): |
| - return 'http://%s.googlecode.com/files/' % self.project_name |
| def find_latest_version(self): |
| - """Find the latest version number of some code available for download on a |
| - Google code page. This was unfortunately done in an ad hoc manner because |
| - Google Code does not seem to have an API for their list of current |
| - downloads(!). |
| - """ |
| - google_code_site = self.google_code_downloads_page() |
| - f = urllib2.urlopen(google_code_site) |
| + """Find the latest version number of ChromeDriver.""" |
| + f = urllib2.urlopen(self.google_storage_downloads_page) |
| latest = '' |
| - for line in f.readlines(): |
| - if re.search(self.download_regex_str, line): |
| - suffix_index = line.find( |
| - self.download_regex_str[self.download_regex_str.rfind('.'):]) |
| - name_end = self.download_regex_str.rfind('.+') |
| - name = self.download_name_func({'os': self.get_os_str, 'version': ''}) |
| - name = name[:name.rfind('.')] |
| - version_str = line[line.find(name) + len(name) : suffix_index] |
| - orig_version_str = version_str |
| - if version_str.count('.') == 0: |
| - version_str = version_str.replace('_', '.') |
| - version_str = re.compile(r'[^\d.]+').sub('', version_str) |
| - if latest == '': |
| - latest = '0.' * version_str.count('.') |
| - latest += '0' |
| - orig_latest_str = latest |
| - else: |
| - orig_latest_str = latest |
| - latest = latest.replace('_', '.') |
| - latest = re.compile(r'[^\d.]+').sub('', latest) |
| - nums = version_str.split('.') |
| - latest_nums = latest.split('.') |
| - for (num, latest_num) in zip(nums, latest_nums): |
| - if int(num) > int(latest_num): |
| - latest = orig_version_str |
| - break |
| - else: |
| - latest = orig_latest_str |
| - if latest == '': |
| - raise Exception("Couldn't find the desired download on " + \ |
| - ' %s.' % google_code_site) |
| - return latest |
| + l = f.read() |
| + r = re.compile('(?:<Key>)(\d+\.\d+)') |
| + v = max(r.findall(l)) |
| + return v |
| def run(self): |
| """Download and install the Google Code.""" |
| print 'Installing from %s' % self.project_name |
| os_str = self.get_os_str |
| version = self.find_latest_version() |
| - download_name = self.download_name_func({'os': os_str, 'version': version}) |
| - urllib.urlretrieve(self.google_code_download() + '/' + download_name, |
| + download_name = 'chromedriver_%s.zip' % os_str |
| + |
| + urllib.urlretrieve(self.google_storage_downloads_page + '/' + version + |
| + '/chromedriver_' + os_str + '.zip', |
| os.path.join(self.download_location, download_name)) |
| - if download_name.endswith('.zip'): |
| - if platform.system() != 'Windows': |
| - # The Python zip utility does not preserve executable permissions, but |
| - # this does not seem to be a problem for Windows, which does not have a |
| - # built in zip utility. :-/ |
| - run_cmd('unzip -u %s -d %s' % (os.path.join(self.download_location, |
| - download_name), self.download_location), stdin='y') |
| - else: |
| - z = zipfile.ZipFile(os.path.join(self.download_location, download_name)) |
| - z.extractall(self.download_location) |
| - z.close() |
| - os.remove(os.path.join(self.download_location, download_name)) |
| + |
| + if platform.system() != 'Windows': |
| + # The Python zip utility does not preserve executable permissions, but |
| + # this does not seem to be a problem for Windows, which does not have a |
| + # built in zip utility. :-/ |
| + run_cmd('unzip -u %s -d %s' % (os.path.join(self.download_location, |
| + download_name), self.download_location), stdin='y') |
| + else: |
| + z = zipfile.ZipFile(os.path.join(self.download_location, download_name)) |
| + z.extractall(self.download_location) |
| + z.close() |
| + os.remove(os.path.join(self.download_location, download_name)) |
| + |
| chrome_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), |
| 'orig-chromedriver') |
| if self.project_name == 'chromedriver' and os.path.exists(chrome_path): |
| @@ -182,7 +140,7 @@ class GoogleCodeInstaller(object): |
| @property |
| def get_os_str(self): |
| - """The strings to indicate what OS a download is for as used on Google Code. |
| + """The strings to indicate what OS a download is for. |
| """ |
| os_str = 'win' |
| if 'darwin' in sys.platform: |
| @@ -393,15 +351,7 @@ def main(): |
| if not args.python: |
| SeleniumBindingsInstaller(args.buildbot).run() |
| if not args.chromedriver: |
| - GoogleCodeInstaller('chromedriver', |
| - find_depot_tools_location(args.buildbot), |
| - lambda x: 'chromedriver_%(os)s_%(version)s.zip' % x).run() |
| - if not args.seleniumrc: |
| - GoogleCodeInstaller('selenium', os.path.dirname(os.path.abspath(__file__)), |
| - lambda x: 'selenium-server-standalone-%(version)s.jar' % x).run() |
| - if not args.iedriver and platform.system() == 'Windows': |
| - GoogleCodeInstaller('selenium', find_depot_tools_location(args.buildbot), |
| - lambda x: 'IEDriverServer_Win32_%(version)s.zip' % x).run() |
| + ChromeDriverInstaller(find_depot_tools_location(args.buildbot)).run() |
| if not args.firefox: |
| FirefoxInstaller().run() |
| if not args.opera: |