#!/usr/bin/env python # Copyright (c) 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Chrome Version Tool Scrapes Chrome channel information and prints out the requested nugget of information. """ import json import optparse import os import string import sys import urllib URL = 'https://omahaproxy.appspot.com/json' def main(): try: data = json.load(urllib.urlopen(URL)) except Exception as e: print 'Error: could not load %s\n\n%s' % (URL, str(e)) return 1 # Iterate to find out valid values for OS, channel, and field options. oses = set() channels = set() fields = set() for os_versions in data: oses.add(os_versions['os']) for version in os_versions['versions']: for field in version: if field == 'channel': channels.add(version['channel']) else: fields.add(field) oses = sorted(oses) channels = sorted(channels) fields = sorted(fields) # Command line parsing fun begins! usage = ('%prog [options]\n' 'Print out information about a particular Chrome channel.') parser = optparse.OptionParser(usage=usage) parser.add_option('-o', '--os', choices=oses, default='win', help='The operating system of interest: %s ' '[default: %%default]' % ', '.join(oses)) parser.add_option('-c', '--channel', choices=channels, default='stable', help='The channel of interest: %s ' '[default: %%default]' % ', '.join(channels)) parser.add_option('-f', '--field', choices=fields, default='version', help='The field of interest: %s ' '[default: %%default] ' % ', '.join(fields)) (opts, args) = parser.parse_args() # Print out requested data if available. for os_versions in data: if os_versions['os'] != opts.os: continue for version in os_versions['versions']: if version['channel'] != opts.channel: continue if opts.field not in version: continue print version[opts.field] return 0 print 'Error: unable to find %s for Chrome %s %s.' % ( opts.field, opts.os, opts.channel) return 1 if __name__ == '__main__': sys.exit(main())